Updating branch refs/heads/andrzejr/tmp3 to 2cb73e6d4175c5d693e91cc5357ac4564912e18f (commit) from c9785b9b7beb502e6b7bd03cbfbc6cd765040a29 (commit)
commit 2cb73e6d4175c5d693e91cc5357ac4564912e18f Author: Andrzej <ndrwr...@gmail.com> Date: Sat Apr 28 19:03:13 2012 +0900 Moved button-related event handlers to buttons panel-plugin/indicator-box.c | 16 +++++++++- panel-plugin/indicator-box.h | 5 +++ panel-plugin/indicator-button.c | 65 ++++++++++++++++++++++++++++++++++++++- panel-plugin/indicator.c | 55 +-------------------------------- panel-plugin/indicator.h | 4 -- 5 files changed, 85 insertions(+), 60 deletions(-) diff --git a/panel-plugin/indicator-box.c b/panel-plugin/indicator-box.c index 37248c4..78567b4 100644 --- a/panel-plugin/indicator-box.c +++ b/panel-plugin/indicator-box.c @@ -292,9 +292,14 @@ xfce_indicator_box_set_size (XfceIndicatorBox *box, GtkWidget * -xfce_indicator_box_new () +xfce_indicator_box_new (XfcePanelPlugin *plugin) { XfceIndicatorBox *box = g_object_new (XFCE_TYPE_INDICATOR_BOX, NULL); + + box->plugin = plugin; + if (box->plugin != NULL) + g_object_ref (G_OBJECT (box->plugin)); + return GTK_WIDGET (box); } @@ -633,3 +638,12 @@ xfce_indicator_box_get_align_left (XfceIndicatorBox *box) return box->align_left; } + + +XfcePanelPlugin * +xfce_indicator_box_get_plugin (XfceIndicatorBox *box) +{ + g_return_val_if_fail (XFCE_IS_INDICATOR_BOX (box), NULL); + + return box->plugin; +} diff --git a/panel-plugin/indicator-box.h b/panel-plugin/indicator-box.h index e4ee8c9..d0746c8 100644 --- a/panel-plugin/indicator-box.h +++ b/panel-plugin/indicator-box.h @@ -21,6 +21,7 @@ #include <glib.h> #include <gtk/gtk.h> #include <libindicator/indicator-object.h> +#include <libxfce4panel/libxfce4panel.h> G_BEGIN_DECLS @@ -40,6 +41,8 @@ struct _XfceIndicatorBox { GtkContainer __parent__; + XfcePanelPlugin *plugin; + GSList *children; gint panel_size; @@ -82,6 +85,8 @@ gboolean xfce_indicator_box_get_align_left (XfceIndicatorBox *box); void xfce_indicator_box_remove_entry (XfceIndicatorBox *box, IndicatorObjectEntry *entry); +XfcePanelPlugin *xfce_indicator_box_get_plugin (XfceIndicatorBox *box); + GtkWidget *xfce_indicator_box_new (); G_END_DECLS diff --git a/panel-plugin/indicator-button.c b/panel-plugin/indicator-button.c index 58ff3cc..ac0f432 100644 --- a/panel-plugin/indicator-button.c +++ b/panel-plugin/indicator-button.c @@ -32,8 +32,21 @@ #include "indicator-button.h" + +#include <libindicator/indicator-object.h> +//#ifndef INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED +//#define INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED "scroll-entry" +//#endif + + static void xfce_indicator_button_finalize (GObject *object); static gint xfce_indicator_button_get_icon_size (XfceIndicatorButton *button); +static gboolean xfce_indicator_button_button_press (GtkWidget *widget, + GdkEventButton *event); +static gboolean xfce_indicator_button_scroll (GtkWidget *widget, + GdkEventScroll *event); +static void xfce_indicator_button_menu_deactivate (XfceIndicatorButton *button, + GtkMenu *menu); G_DEFINE_TYPE (XfceIndicatorButton, xfce_indicator_button, GTK_TYPE_TOGGLE_BUTTON) @@ -41,10 +54,16 @@ G_DEFINE_TYPE (XfceIndicatorButton, xfce_indicator_button, GTK_TYPE_TOGGLE_BUTTO static void xfce_indicator_button_class_init (XfceIndicatorButtonClass *klass) { - GObjectClass *gobject_class; + GObjectClass *gobject_class; + GtkWidgetClass *widget_class; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = xfce_indicator_button_finalize; + + widget_class = GTK_WIDGET_CLASS (klass); + widget_class->button_press_event = xfce_indicator_button_button_press; + widget_class->scroll_event = xfce_indicator_button_scroll; + } @@ -314,6 +333,8 @@ xfce_indicator_button_set_menu (XfceIndicatorButton *button, g_object_unref (G_OBJECT (button->menu)); button->menu = menu; g_object_ref (G_OBJECT (button->menu)); + g_signal_connect_swapped (G_OBJECT (button->menu), "deactivate", + G_CALLBACK (xfce_indicator_button_menu_deactivate), button); gtk_menu_attach_to_widget(menu, GTK_WIDGET (button), NULL); } } @@ -454,3 +475,45 @@ xfce_indicator_button_disconnect_signals (XfceIndicatorButton *button) } + +static gboolean +xfce_indicator_button_button_press (GtkWidget *widget, + GdkEventButton *event) +{ + XfceIndicatorButton *button = XFCE_INDICATOR_BUTTON (widget); + + if( event->button == 1) /* left click only */ + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),TRUE); + gtk_menu_popup (button->menu, NULL, NULL, + xfce_panel_plugin_position_menu, + xfce_indicator_box_get_plugin (button->buttonbox), + 1, gtk_get_current_event_time ()); + return TRUE; + } + + return FALSE; +} + + +static gboolean +xfce_indicator_button_scroll (GtkWidget *widget, GdkEventScroll *event) +{ + XfceIndicatorButton *button = XFCE_INDICATOR_BUTTON (widget); + + g_signal_emit_by_name (button->io, INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, + button->entry, 1, event->direction); + + return TRUE; +} + + +static void +xfce_indicator_button_menu_deactivate (XfceIndicatorButton *button, + GtkMenu *menu) +{ + g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button)); + g_return_if_fail (GTK_IS_MENU (menu)); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); +} diff --git a/panel-plugin/indicator.c b/panel-plugin/indicator.c index e122aea..f152a02 100644 --- a/panel-plugin/indicator.c +++ b/panel-plugin/indicator.c @@ -182,7 +182,7 @@ indicator_init (IndicatorPlugin *indicator) indicator->ebox = gtk_event_box_new(); gtk_widget_set_can_focus(GTK_WIDGET(indicator->ebox), TRUE); - indicator->buttonbox = xfce_indicator_box_new (); + indicator->buttonbox = xfce_indicator_box_new (plugin); gtk_container_add (GTK_CONTAINER (indicator->ebox), GTK_WIDGET(indicator->buttonbox)); gtk_container_add (GTK_CONTAINER (plugin), GTK_WIDGET(indicator->ebox)); gtk_widget_show(GTK_WIDGET(indicator->buttonbox)); @@ -270,36 +270,6 @@ indicator_size_changed (XfcePanelPlugin *plugin, } - -static gboolean -on_button_press (GtkWidget *widget, GdkEventButton *event, IndicatorPlugin *indicator) -{ - XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (indicator); - - if (indicator != NULL) - { - if( event->button == 1) /* left click only */ - { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),TRUE); - gtk_menu_popup (xfce_indicator_button_get_menu (XFCE_INDICATOR_BUTTON(widget)), NULL, NULL, - xfce_panel_plugin_position_menu, - plugin, 1, gtk_get_current_event_time ()); - - return TRUE; - } - /* event doesn't make it to the ebox, so I just push it. */ - gtk_widget_event (indicator->ebox, (GdkEvent*)event); - } - return FALSE; -} - -static void -menu_deactivate (GtkMenu *menu, - gpointer user_data) -{ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_menu_get_attach_widget (menu)), FALSE); -} - static void indicator_construct (XfcePanelPlugin *plugin) { @@ -359,21 +329,6 @@ indicator_construct (XfcePanelPlugin *plugin) } -static gboolean -entry_scrolled (GtkWidget *menuitem, GdkEventScroll *event, IndicatorPlugin *indicator) -{ - IndicatorObject *io = xfce_indicator_button_get_io (XFCE_INDICATOR_BUTTON (menuitem)); - IndicatorObjectEntry *entry = xfce_indicator_button_get_entry (XFCE_INDICATOR_BUTTON (menuitem)); - - g_return_val_if_fail(INDICATOR_IS_OBJECT(io), FALSE); - g_return_val_if_fail(indicator != NULL, FALSE); - - g_signal_emit_by_name (io, INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, entry, 1, event->direction); - - return TRUE; -} - - static void entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_data) { @@ -391,15 +346,7 @@ entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_d xfce_indicator_button_set_label(XFCE_INDICATOR_BUTTON(button), entry->label); if (entry->menu != NULL) - { xfce_indicator_button_set_menu (XFCE_INDICATOR_BUTTON(button), entry->menu); - g_signal_connect(G_OBJECT(entry->menu), "deactivate", G_CALLBACK(menu_deactivate),NULL); - } - - g_signal_connect(button, "button-press-event", G_CALLBACK(on_button_press), - user_data); - g_signal_connect(button, "scroll-event", G_CALLBACK(entry_scrolled), - user_data); gtk_container_add(GTK_CONTAINER (indicator->buttonbox), button); gtk_widget_show(button); diff --git a/panel-plugin/indicator.h b/panel-plugin/indicator.h index dfe2b47..488bb5f 100644 --- a/panel-plugin/indicator.h +++ b/panel-plugin/indicator.h @@ -38,10 +38,6 @@ GType indicator_get_type (void) G_GNUC_CONST; void indicator_register_type (XfcePanelTypeModule *type_module); -#ifndef INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED -#define INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED "scroll-entry" -#endif - void indicator_save (XfcePanelPlugin *plugin, IndicatorPlugin *indicator); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits