summaryrefslogtreecommitdiff
path: root/plugins/gtkui/ddbequalizer.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-18 18:32:55 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-18 18:32:55 +0200
commitfab0e77243dee005fe0ec979d69f639fdc7dac22 (patch)
treedffbfc39218ccbb36b88f4c8e49eea3f98ca3cd0 /plugins/gtkui/ddbequalizer.c
parente70521bc897a02e98b397d210d174f84fd886879 (diff)
eq refresh after gtk theme change WIP
Diffstat (limited to 'plugins/gtkui/ddbequalizer.c')
-rw-r--r--plugins/gtkui/ddbequalizer.c47
1 files changed, 33 insertions, 14 deletions
diff --git a/plugins/gtkui/ddbequalizer.c b/plugins/gtkui/ddbequalizer.c
index bb4aa2e5..8bbd8dc3 100644
--- a/plugins/gtkui/ddbequalizer.c
+++ b/plugins/gtkui/ddbequalizer.c
@@ -43,6 +43,7 @@ typedef struct _DdbEqualizer DdbEqualizer;
typedef struct _DdbEqualizerClass DdbEqualizerClass;
typedef struct _DdbEqualizerPrivate DdbEqualizerPrivate;
#define _gdk_cursor_unref0(var) ((var == NULL) ? NULL : (var = (gdk_cursor_unref (var), NULL)))
+#define _gdk_event_free0(var) ((var == NULL) ? NULL : (var = (gdk_event_free (var), NULL)))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
#define _pango_font_description_free0(var) ((var == NULL) ? NULL : (var = (pango_font_description_free (var), NULL)))
@@ -79,6 +80,8 @@ enum {
};
#define DDB_EQUALIZER_bands 18
#define DDB_EQUALIZER_spot_size 3
+static gboolean ddb_equalizer_real_configure_event (GtkWidget* base, GdkEventConfigure* event);
+static void ddb_equalizer_send_configure (DdbEqualizer* self);
static void ddb_equalizer_real_realize (GtkWidget* base);
static inline double ddb_equalizer_scale (DdbEqualizer* self, double val);
static gboolean ddb_equalizer_real_expose_event (GtkWidget* base, GdkEventExpose* event);
@@ -92,7 +95,6 @@ void ddb_equalizer_set_band (DdbEqualizer* self, gint band, double v);
double ddb_equalizer_get_band (DdbEqualizer* self, gint band);
void ddb_equalizer_set_preamp (DdbEqualizer* self, double v);
double ddb_equalizer_get_preamp (DdbEqualizer* self);
-static gboolean ddb_equalizer_real_configure_event (GtkWidget* base, GdkEventConfigure* event);
DdbEqualizer* ddb_equalizer_new (void);
DdbEqualizer* ddb_equalizer_construct (GType object_type);
static GObject * ddb_equalizer_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
@@ -101,18 +103,46 @@ static void ddb_equalizer_finalize (GObject* obj);
const char* freqs[18] = {"55 Hz", "77 Hz", "110 Hz", "156 Hz", "220 Hz", "311 Hz", "440 Hz", "622 Hz", "880 Hz", "1.2 kHz", "1.8 kHz", "2.5 kHz", "3.5 kHz", "5 kHz", "7 kHz", "10 kHz", "14 kHz", "20 kHz"};
+static gboolean ddb_equalizer_real_configure_event (GtkWidget* base, GdkEventConfigure* event) {
+ DdbEqualizer * self;
+ gboolean result = FALSE;
+ self = (DdbEqualizer*) base;
+ gtkui_init_theme_colors ();
+ result = FALSE;
+ return result;
+}
+
+
+static void ddb_equalizer_send_configure (DdbEqualizer* self) {
+ GdkEvent* event;
+ g_return_if_fail (self != NULL);
+ event = gdk_event_new (GDK_CONFIGURE);
+ event->configure.window = GDK_WINDOW (g_object_ref ((GObject*) ((GtkWidget*) self)->window));
+ event->configure.send_event = (gchar) 1;
+ event->configure.x = ((GtkWidget*) self)->allocation.x;
+ event->configure.y = ((GtkWidget*) self)->allocation.y;
+ event->configure.width = ((GtkWidget*) self)->allocation.width;
+ event->configure.height = ((GtkWidget*) self)->allocation.height;
+ gtk_widget_event ((GtkWidget*) self, event);
+ _gdk_event_free0 (event);
+}
+
+
static void ddb_equalizer_real_realize (GtkWidget* base) {
DdbEqualizer * self;
GdkWindowAttr _tmp0_ = {0};
GdkWindowAttr attrs;
GdkWindow* _tmp1_;
self = (DdbEqualizer*) base;
+ GTK_WIDGET_SET_FLAGS ((GtkWidget*) self, GTK_REALIZED);
+ gtk_widget_add_events ((GtkWidget*) self, (gint) (((GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK) | GDK_LEAVE_NOTIFY_MASK) | GDK_POINTER_MOTION_MASK));
attrs = (memset (&_tmp0_, 0, sizeof (GdkWindowAttr)), _tmp0_.window_type = GDK_WINDOW_CHILD, _tmp0_.wclass = GDK_INPUT_OUTPUT, _tmp0_.event_mask = gtk_widget_get_events ((GtkWidget*) self) | GDK_EXPOSURE_MASK, _tmp0_);
((GtkWidget*) self)->window = (_tmp1_ = gdk_window_new (gtk_widget_get_parent_window ((GtkWidget*) self), &attrs, 0), _g_object_unref0 (((GtkWidget*) self)->window), _tmp1_);
gdk_window_move_resize (((GtkWidget*) self)->window, ((GtkWidget*) self)->allocation.x, ((GtkWidget*) self)->allocation.y, ((GtkWidget*) self)->allocation.width, ((GtkWidget*) self)->allocation.height);
gdk_window_set_user_data (((GtkWidget*) self)->window, self);
gtk_widget_set_style ((GtkWidget*) self, gtk_style_attach (gtk_widget_get_style ((GtkWidget*) self), ((GtkWidget*) self)->window));
- GTK_WIDGET_SET_FLAGS ((GtkWidget*) self, GTK_REALIZED);
+ gtk_style_set_background (gtk_widget_get_style ((GtkWidget*) self), ((GtkWidget*) self)->window, GTK_STATE_NORMAL);
+ ddb_equalizer_send_configure (self);
}
@@ -566,16 +596,6 @@ double ddb_equalizer_get_preamp (DdbEqualizer* self) {
}
-static gboolean ddb_equalizer_real_configure_event (GtkWidget* base, GdkEventConfigure* event) {
- DdbEqualizer * self;
- gboolean result = FALSE;
- self = (DdbEqualizer*) base;
- gtkui_init_theme_colors ();
- result = FALSE;
- return result;
-}
-
-
DdbEqualizer* ddb_equalizer_construct (GType object_type) {
DdbEqualizer * self;
self = g_object_newv (object_type, 0, NULL);
@@ -596,7 +616,6 @@ static GObject * ddb_equalizer_constructor (GType type, guint n_construct_proper
obj = parent_class->constructor (type, n_construct_properties, construct_properties);
self = DDB_EQUALIZER (obj);
{
- gtk_widget_add_events ((GtkWidget*) self, (gint) (((GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK) | GDK_LEAVE_NOTIFY_MASK) | GDK_POINTER_MOTION_MASK));
self->priv->margin_bottom = (gint) (((pango_units_to_double (pango_font_description_get_size (gtk_widget_get_style ((GtkWidget*) self)->font_desc)) * gdk_screen_get_resolution (gdk_screen_get_default ())) / 72) + 4);
self->priv->margin_left = self->priv->margin_bottom * 4;
gtk_widget_set_app_paintable ((GtkWidget*) self, TRUE);
@@ -608,13 +627,13 @@ static GObject * ddb_equalizer_constructor (GType type, guint n_construct_proper
static void ddb_equalizer_class_init (DdbEqualizerClass * klass) {
ddb_equalizer_parent_class = g_type_class_peek_parent (klass);
g_type_class_add_private (klass, sizeof (DdbEqualizerPrivate));
+ GTK_WIDGET_CLASS (klass)->configure_event = ddb_equalizer_real_configure_event;
GTK_WIDGET_CLASS (klass)->realize = ddb_equalizer_real_realize;
GTK_WIDGET_CLASS (klass)->expose_event = ddb_equalizer_real_expose_event;
GTK_WIDGET_CLASS (klass)->button_press_event = ddb_equalizer_real_button_press_event;
GTK_WIDGET_CLASS (klass)->button_release_event = ddb_equalizer_real_button_release_event;
GTK_WIDGET_CLASS (klass)->leave_notify_event = ddb_equalizer_real_leave_notify_event;
GTK_WIDGET_CLASS (klass)->motion_notify_event = ddb_equalizer_real_motion_notify_event;
- GTK_WIDGET_CLASS (klass)->configure_event = ddb_equalizer_real_configure_event;
G_OBJECT_CLASS (klass)->constructor = ddb_equalizer_constructor;
G_OBJECT_CLASS (klass)->finalize = ddb_equalizer_finalize;
g_signal_new ("on_changed", DDB_TYPE_EQUALIZER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);