Updating branch refs/heads/master to 685a8fce39ee7ecf644267111876295c342eeed2 (commit) from d7d880f979dd3b3bc4875a54a97d803f69cb3882 (commit)
commit 685a8fce39ee7ecf644267111876295c342eeed2 Author: Valentin Dudouyt <valentin.dudo...@gmail.com> Date: Sat Nov 17 22:50:01 2012 +0700 1) 'flatten buttons' is now customizable 2) Fixed enter-notify in group menu when mouse pressed 3) Added debugging messages with g_debug taskbar-widget.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++------ taskbar.c | 2 + 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/taskbar-widget.c b/taskbar-widget.c index 52b68ab..f5b6ce0 100644 --- a/taskbar-widget.c +++ b/taskbar-widget.c @@ -71,6 +71,7 @@ enum PROP_SHOW_HANDLE, PROP_SHOW_INSTANCES_HOVER, PROP_DRAG_BUTTON, + PROP_FLAT_BUTTONS, }; @@ -145,6 +146,7 @@ struct _XfceTaskBar guint show_handle : 1; guint show_instances_hover : 1; guint drag_button; /* Middle */ + guint flat_buttons : 1; guint unique_id_counter ; @@ -318,6 +320,7 @@ static void xfce_taskbar_class_init (XfceTaskBarClass *klass) g_object_class_install_property (gobject_class, PROP_SHOW_HANDLE, g_param_spec_boolean ("show-handle", NULL, NULL, TRUE, EXO_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_SHOW_INSTANCES_HOVER, g_param_spec_boolean ("show-instances-on-hover", NULL, NULL, TRUE, EXO_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_DRAG_BUTTON, g_param_spec_int ("drag-button", NULL, NULL, -1, G_MAXINT, 0, EXO_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, PROP_FLAT_BUTTONS, g_param_spec_boolean ("flat-buttons", NULL, NULL, TRUE, EXO_PARAM_READWRITE)); gtk_widget_class_install_style_property (gtkwidget_class, g_param_spec_int ("max-button-length", NULL, "The maximum length of a window button", -1, G_MAXINT, DEFAULT_MAX_BUTTON_LENGTH, EXO_PARAM_READABLE)); gtk_widget_class_install_style_property (gtkwidget_class, g_param_spec_int ("min-button-length", NULL, "The minumum length of a window button", 1, G_MAXINT, DEFAULT_MIN_BUTTON_LENGTH, EXO_PARAM_READABLE)); @@ -352,6 +355,7 @@ static void xfce_taskbar_init (XfceTaskBar *taskbar) taskbar->show_handle = TRUE; taskbar->show_instances_hover = FALSE; taskbar->drag_button = 1; /* Middle */ + taskbar->flat_buttons = 0; taskbar->all_monitors = TRUE; taskbar->unique_id_counter = 0x0 ; xfce_taskbar_geometry_set_invalid (taskbar); @@ -412,6 +416,10 @@ static void xfce_taskbar_get_property (GObject *object, guint prop_id, GValue *v g_value_set_int (value, taskbar->drag_button); break; + case PROP_FLAT_BUTTONS: + g_value_set_boolean (value, taskbar->flat_buttons); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -421,6 +429,7 @@ static void xfce_taskbar_get_property (GObject *object, guint prop_id, GValue *v static void xfce_taskbar_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { XfceTaskBar *taskbar = XFCE_taskbar (object); + GList *gi ; switch (prop_id) { @@ -454,6 +463,17 @@ static void xfce_taskbar_set_property (GObject *object, guint prop_id, const GVa case PROP_DRAG_BUTTON: taskbar->drag_button = g_value_get_int (value); + g_debug("drag_button=%d", taskbar->drag_button); + break; + + case PROP_FLAT_BUTTONS: + taskbar->flat_buttons = g_value_get_boolean (value); + // Applying the changes immediately + for(gi=taskbar->wgroups; gi!=NULL; gi=gi->next) + { + XfceTaskBarGroup *group =gi->data ; + xfce_taskbar_group_update_visibility(group); + } break; default: @@ -577,7 +597,7 @@ void xfce_taskbar_save_pinned_config (XfceTaskBar *taskbar) static void xfce_taskbar_finalize (GObject *object) { - g_message("taskbar finalize"); + g_debug("taskbar finalize"); XfceTaskBar *taskbar = XFCE_taskbar (object); // data that should already be freed when disconnecting the screen @@ -1565,6 +1585,7 @@ static void xfce_taskbar_button_geometry_changed (WnckWindow *window, XfceTaskBa static gboolean xfce_taskbar_button_leave_notify_event (GtkWidget *button, GdkEventCrossing *event, XfceTaskBarWNode *child) { + g_debug("leave_notify"); panel_return_val_if_fail (XFCE_IS_taskbar (child->taskbar), FALSE); /* disconnect signals */ @@ -1604,6 +1625,7 @@ static gboolean xfce_taskbar_button_enter_notify_event (GtkWidget *button, GdkEv static void wnck_action_menu_destroy(GtkWidget *wnck_widget, GtkWidget *menu_widget) { + g_debug("wnck_action_menu_destroy"); gtk_widget_destroy(wnck_widget); xfce_taskbar_group_button_menu_destroy(menu_widget, NULL); } @@ -1612,6 +1634,7 @@ static void wnck_action_menu_destroy(GtkWidget *wnck_widget, GtkWidget *menu_wid //Returning FALSE will close the menu that generated the event, return TRUE will persist it static gboolean xfce_taskbar_app_button_release_event (GtkWidget *button, GdkEventButton *event, XfceTaskBarWNode *child) { + g_debug("xfce_taskbar_app_button_release_event"); panel_return_val_if_fail (XFCE_IS_taskbar (child->taskbar), FALSE); /* only respond to in-button events */ @@ -2266,12 +2289,15 @@ static GtkWidget * xfce_taskbar_group_button_menu_group_actions (XfceTaskBarGrou static void xfce_taskbar_group_button_menu_destroy(GtkWidget *menu_widget, XfceTaskBarGroup *group) { + g_debug("xfce_taskbar_group_button_menu_destroy"); xfce_taskbar_disable_hover_menu_timeout(menu_widget); gtk_widget_destroy (menu_widget); #ifdef GDK_WINDOWING_X11 // Removes the wireframe associated with the currently selected window if(group) xfce_taskbar_wireframe_hide (group->taskbar); #endif + // The group button doesn't need to be activated anymore + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (group->button), FALSE); } @@ -2304,9 +2330,26 @@ static gboolean xfce_taskbar_group_button_press_event XfceTaskBarWNode *active_child; int visible_count; get_active_child(group, &active_child, &visible_count); - if(group->taskbar->drag_button == 1 && visible_count > 1) { - GtkWidget *menu_widget = xfce_taskbar_group_button_menu_show_active (group); - xfce_taskbar_activate_hover_menu(menu_widget, group, event->button); + g_debug("event_button=%d drag_button=%d", event->button, group->taskbar->drag_button); + if(group->taskbar->drag_button == 1 + && event->button == LEFTMOUSE + && visible_count > 1) { + // Activating menu with gtk_widget_show is not so good here as + // it may prevent notify-event from being received. + // Considering the situation: + // 1) User configured drag_button to Middle in his settings + // 2) The user clicks the button and tries to select the menu item + // with left button holded + GtkWidget *menu = xfce_taskbar_group_button_menu_show_active (group); + g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (xfce_taskbar_group_button_menu_destroy), group); + + gtk_menu_attach_to_widget (GTK_MENU (menu), button, NULL); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, + xfce_panel_plugin_position_menu, + xfce_taskbar_get_panel_plugin (group->taskbar), + event->button, + event->time); + xfce_taskbar_disable_hover_menu_timeout(menu); return TRUE; } return FALSE ; @@ -2317,7 +2360,7 @@ static gboolean xfce_taskbar_group_button_press_event static gboolean xfce_taskbar_group_button_release_event (GtkWidget *button, GdkEventButton *event, XfceTaskBarGroup *group) { - g_message("xfce_taskbar_group_button_release_event"); + g_debug("xfce_taskbar_group_button_release_event"); GtkWidget *panel_plugin; GtkWidget *menu_widget; @@ -2412,7 +2455,7 @@ static gboolean xfce_taskbar_group_button_release_event } } - if(group->taskbar->drag_button == 0) + if(event->button == RIGHTMOUSE) xfce_taskbar_activate_hover_menu(menu_widget, group, event->button); return TRUE; @@ -2424,6 +2467,7 @@ static gboolean xfce_taskbar_group_button_release_event //This callback gets triggered if the mouse has left the group icon but has not entered the hover menu static gboolean xfce_taskbar_hover_menu_timeout(gpointer menu_ptr) { + g_debug("xfce_taskbar_hover_menu_timeout"); GtkWidget *menu_widget = (GtkWidget *)menu_ptr; gtk_widget_destroy (menu_widget); return FALSE ; @@ -2452,6 +2496,7 @@ static gboolean xfce_taskbar_hover_menu_enter(GtkWidget *widget, GdkEvent *even //Triggered when mouse focus leaves the hover menu static gboolean xfce_taskbar_hover_menu_leave(GtkWidget *widget, GdkEvent *event, gpointer menu_ptr) { + g_debug("xfce_taskbar_hover_menu_leave"); GtkWidget *menu_widget = (GtkWidget *)menu_ptr; //We don't want to kill the hover menu immediately, so we wait a small time size_t timeout_id = (size_t)g_timeout_add(300, xfce_taskbar_hover_menu_timeout, menu_widget); @@ -2581,7 +2626,10 @@ static void xfce_taskbar_group_update_visibility(XfceTaskBarGroup *group) } else { - gtk_button_set_relief (GTK_BUTTON (group->button), GTK_RELIEF_NORMAL); + gtk_button_set_relief (GTK_BUTTON (group->button), + group->taskbar->flat_buttons + ? GTK_RELIEF_NONE + : GTK_RELIEF_NORMAL); gtk_widget_show(group->button); } diff --git a/taskbar.c b/taskbar.c index aec7804..d40478f 100644 --- a/taskbar.c +++ b/taskbar.c @@ -103,6 +103,7 @@ static void taskbar_plugin_construct (XfcePanelPlugin *panel_plugin) { "show-handle", G_TYPE_BOOLEAN }, { "show-instances-on-hover", G_TYPE_BOOLEAN }, { "drag-button", G_TYPE_INT }, + { "flat-buttons", G_TYPE_BOOLEAN }, { NULL } }; @@ -181,6 +182,7 @@ static void taskbar_plugin_configure_plugin (XfcePanelPlugin *panel_plugin) TASKBAR_DIALOG_BIND ("show-handle", "active") TASKBAR_DIALOG_BIND ("show-instances-on-hover", "active") TASKBAR_DIALOG_BIND ("drag-button", "active") + TASKBAR_DIALOG_BIND ("flat-buttons", "active") #ifndef GDK_WINDOWING_X11 /* not functional in x11, so avoid confusion */ _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits