Created
April 19, 2021 14:30
-
-
Save saivert/00fb0a04d038a8bb60d76dec49e22d49 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/plugins/gtkui/ddbseekbar.c b/plugins/gtkui/ddbseekbar.c | |
| index c9f7b4a66..37cd034a1 100644 | |
| --- a/plugins/gtkui/ddbseekbar.c | |
| +++ b/plugins/gtkui/ddbseekbar.c | |
| @@ -191,6 +191,7 @@ static void ddb_seekbar_class_init (DdbSeekbarClass * klass) { | |
| GTK_WIDGET_CLASS (klass)->button_release_event = ddb_seekbar_real_button_release_event; | |
| GTK_WIDGET_CLASS (klass)->motion_notify_event = ddb_seekbar_real_motion_notify_event; | |
| GTK_WIDGET_CLASS (klass)->configure_event = ddb_seekbar_real_configure_event; | |
| + // GTK_WIDGET_CLASS (klass)->scroll_event = ddb_seekbar_real_scroll_event; | |
| G_OBJECT_CLASS (klass)->constructor = ddb_seekbar_constructor; | |
| } | |
| diff --git a/plugins/gtkui/ddbvolumebar.c b/plugins/gtkui/ddbvolumebar.c | |
| index 41cc83a0a..e31b9600d 100644 | |
| --- a/plugins/gtkui/ddbvolumebar.c | |
| +++ b/plugins/gtkui/ddbvolumebar.c | |
| @@ -64,6 +64,7 @@ ddb_volumebar_size_allocate (GtkWidget *widget, | |
| if (gtk_widget_get_realized (widget)) | |
| { | |
| + printf(stderr, "size_allocate -> get_realized is TRUE\n"); | |
| if (gtk_widget_get_has_window (widget)) | |
| gdk_window_move_resize (gtk_widget_get_window(widget), | |
| allocation->x, allocation->y, | |
| @@ -99,6 +100,92 @@ on_volumebar_scroll_event (GtkWidget *widget, | |
| gboolean | |
| on_volumebar_configure_event (GtkWidget *widget, GdkEventConfigure *event); | |
| + | |
| +static void | |
| +ddbvolumebar_realize (GtkWidget *widget) | |
| +{ | |
| + DdbVolumeBar *button = DDB_VOLUMEBAR (widget); | |
| + | |
| + GtkAllocation allocation; | |
| + GdkWindow *window; | |
| + GdkWindowAttr attributes; | |
| + gint attributes_mask; | |
| + | |
| + gtk_widget_get_allocation (widget, &allocation); | |
| + | |
| + gtk_widget_set_realized (widget, TRUE); | |
| + | |
| + attributes.window_type = GDK_WINDOW_CHILD; | |
| + attributes.x = allocation.x; | |
| + attributes.y = allocation.y; | |
| + attributes.width = allocation.width; | |
| + attributes.height = allocation.height; | |
| + attributes.wclass = GDK_INPUT_ONLY; | |
| + attributes.event_mask = gtk_widget_get_events (widget); | |
| + attributes.event_mask |= (GDK_BUTTON_PRESS_MASK | | |
| + GDK_BUTTON_RELEASE_MASK | | |
| + GDK_ENTER_NOTIFY_MASK | | |
| + GDK_LEAVE_NOTIFY_MASK); | |
| + | |
| + attributes_mask = GDK_WA_X | GDK_WA_Y; | |
| + | |
| + window = gtk_widget_get_parent_window (widget); | |
| + gtk_widget_set_window (widget, window); | |
| + g_object_ref (window); | |
| + | |
| + button->event_window = gdk_window_new (window, | |
| + &attributes, attributes_mask); | |
| + | |
| +#if GTK_CHECK_VERSION(3,0,0) | |
| + gtk_widget_register_window (widget, button->event_window); | |
| +#else | |
| + gdk_window_set_user_data (button->event_window, widget); | |
| +#endif | |
| +} | |
| + | |
| + | |
| +static void | |
| +ddbvolumebar_unrealize (GtkWidget *widget) | |
| +{ | |
| + DdbVolumeBar *button = DDB_VOLUMEBAR (widget); | |
| + | |
| + if (button->event_window) | |
| + { | |
| +#if GTK_CHECK_VERSION(3,0,0) | |
| + gtk_widget_unregister_window (widget, button->event_window); | |
| +#endif | |
| + gdk_window_destroy (button->event_window); | |
| + button->event_window = NULL; | |
| + } | |
| + | |
| + GTK_WIDGET_CLASS (ddb_volumebar_parent_class)->unrealize (widget); | |
| +} | |
| + | |
| +static void | |
| +ddbvolumebar_map (GtkWidget *widget) | |
| +{ | |
| + DdbVolumeBar *button = DDB_VOLUMEBAR (widget); | |
| + | |
| + GTK_WIDGET_CLASS (ddb_volumebar_parent_class)->map (widget); | |
| + | |
| + if (button->event_window) | |
| + gdk_window_show (button->event_window); | |
| +} | |
| + | |
| +static void | |
| +ddbvolumebar_unmap (GtkWidget *widget) | |
| +{ | |
| + DdbVolumeBar *button = DDB_VOLUMEBAR (widget); | |
| + | |
| + if (button->event_window) | |
| + { | |
| + gdk_window_hide (button->event_window); | |
| + } | |
| + | |
| + GTK_WIDGET_CLASS (ddb_volumebar_parent_class)->unmap (widget); | |
| +} | |
| + | |
| + | |
| static void | |
| ddb_volumebar_class_init(DdbVolumeBarClass *class) | |
| { | |
| @@ -114,6 +201,12 @@ ddb_volumebar_class_init(DdbVolumeBarClass *class) | |
| widget_class->motion_notify_event = on_volumebar_motion_notify_event; | |
| widget_class->scroll_event = on_volumebar_scroll_event; | |
| widget_class->configure_event = on_volumebar_configure_event; | |
| + | |
| + widget_class->realize = ddbvolumebar_realize; | |
| + widget_class->unrealize = ddbvolumebar_unrealize; | |
| + widget_class->map = ddbvolumebar_map; | |
| + widget_class->unmap = ddbvolumebar_unmap; | |
| + | |
| } | |
| GtkWidget * ddb_volumebar_new() { | |
| diff --git a/plugins/gtkui/ddbvolumebar.h b/plugins/gtkui/ddbvolumebar.h | |
| index 66b0d957c..d9f823b39 100644 | |
| --- a/plugins/gtkui/ddbvolumebar.h | |
| +++ b/plugins/gtkui/ddbvolumebar.h | |
| @@ -44,6 +44,8 @@ typedef void * DdbVolumeBarColIter; | |
| struct _DdbVolumeBar { | |
| GtkWidget parent; | |
| int show_dbs; | |
| + | |
| + GdkWindow *event_window; | |
| }; | |
| struct _DdbVolumeBarClass { | |
| diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c | |
| index 65f8b43bf..904f91813 100644 | |
| --- a/plugins/gtkui/widgets.c | |
| +++ b/plugins/gtkui/widgets.c | |
| @@ -4319,16 +4319,13 @@ ddb_gtkui_widget_t * | |
| w_volumebar_create (void) { | |
| w_volumebar_t *w = malloc (sizeof (w_volumebar_t)); | |
| memset (w, 0, sizeof (w_volumebar_t)); | |
| - w->base.widget = gtk_event_box_new (); | |
| + w->base.widget = w->volumebar = ddb_volumebar_new (); | |
| w->base.message = w_volumebar_message; | |
| - w->volumebar = ddb_volumebar_new (); | |
| #if GTK_CHECK_VERSION(3,0,0) | |
| gtk_widget_set_events (GTK_WIDGET (w->base.widget), gtk_widget_get_events (GTK_WIDGET (w->base.widget)) | GDK_SCROLL_MASK); | |
| #endif | |
| - ddb_volumebar_init_signals (DDB_VOLUMEBAR (w->volumebar), w->base.widget); | |
| gtk_widget_show (w->volumebar); | |
| gtk_widget_set_size_request (w->base.widget, 70, -1); | |
| - gtk_container_add (GTK_CONTAINER (w->base.widget), w->volumebar); | |
| w_override_signals (w->base.widget, w); | |
| return (ddb_gtkui_widget_t*)w; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment