Updating branch refs/heads/master to 45f671e1da41ee314bdaaaf4b0b149bfd1edaf8b (commit) from 72a751dd024b0159fe52c3b554b925e03cebff28 (commit)
commit 45f671e1da41ee314bdaaaf4b0b149bfd1edaf8b Author: Mark Trompell <m...@foresightlinux.org> Date: Wed Jul 13 14:44:17 2011 +0200 use hbox with buttons instead of menubar panel-plugin/indicator.c | 96 +++++++++++++++++++++++---------------------- panel-plugin/indicator.h | 4 +- 2 files changed, 51 insertions(+), 49 deletions(-) diff --git a/panel-plugin/indicator.c b/panel-plugin/indicator.c index 169cb0e..fee5185 100644 --- a/panel-plugin/indicator.c +++ b/panel-plugin/indicator.c @@ -35,11 +35,11 @@ static void indicator_construct (XfcePanelPlugin *plugin); static gboolean -load_module (const gchar * name, GtkWidget * menu); - +load_module (const gchar * name, IndicatorPlugin * indicator); +/* static gboolean on_menu_press (GtkWidget *widget, GdkEventButton *event, IndicatorPlugin *indicator); - +*/ /* register the plugin */ XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (indicator_construct); @@ -63,43 +63,21 @@ indicator_new (XfcePanelPlugin *plugin) /* Init some theme/icon stuff */ gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), INDICATOR_ICONS_DIR); - /* g_debug("Icons directory: %s", INDICATOR_ICONS_DIR); */ + gtk_widget_set_name(GTK_WIDGET (indicator), "indicator-plugin"); + + indicator->buttonbox = gtk_hbox_new(FALSE,0); + gtk_widget_set_can_focus(GTK_WIDGET(indicator->buttonbox), TRUE); gtk_rc_parse_string ( "style \"indicator-plugin-style\"\n" "{\n" - " GtkMenuBar::shadow-type = none\n" - " GtkMenuBar::internal-padding = 0\n" - " GtkWidget::focus-line-width = 0\n" - " GtkWidget::focus-padding = 0\n" - "}\n" - "style \"indicator-plugin-menubar-style\"\n" - "{\n" - " GtkMenuBar::shadow-type = none\n" - " GtkMenuBar::internal-padding = 0\n" - " GtkWidget::focus-line-width = 0\n" - " GtkWidget::focus-padding = 0\n" - " GtkMenuItem::horizontal-padding = 0\n" - "}\n" - "style \"indicator-plugin-menuitem-style\"\n" - "{\n" + " GtkButton::internal-border= 0\n" " GtkWidget::focus-line-width = 0\n" " GtkWidget::focus-padding = 0\n" - " GtkMenuItem::horizontal-padding = 0\n" "}\n" - "widget \"*.indicator-plugin\" style \"indicator-plugin-style\"" - "widget \"*.indicator-plugin-menuitem\" style \"indicator-plugin-menuitem-style\"" - "widget \"*.indicator-plugin-menubar\" style \"indicator-plugin-menubar-style\""); - gtk_widget_set_name(GTK_WIDGET (plugin), "indicator-plugin"); - /* create some panel widgets */ - - /* Build menu */ - indicator->menu = gtk_menu_bar_new(); - gtk_widget_set_can_focus(indicator->menu, TRUE); - gtk_widget_set_name(GTK_WIDGET (indicator->menu), "indicator-plugin-menubar"); - g_signal_connect(indicator->menu, "button-press-event", G_CALLBACK(on_menu_press), NULL); - //g_signal_connect_after(indicator->menu, "expose-event", G_CALLBACK(menu_on_expose), menu); - gtk_container_set_border_width(GTK_CONTAINER(indicator->menu), 0); + "widget \"*.indicator-button\" style \"indicator-plugin-style\""); + gtk_widget_set_name(GTK_WIDGET (indicator->buttonbox), "indicator-button"); + gtk_container_set_border_width(GTK_CONTAINER(indicator->buttonbox), 0); /* load 'em */ if (g_file_test(INDICATOR_DIR, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) { @@ -107,7 +85,7 @@ indicator_new (XfcePanelPlugin *plugin) const gchar * name; while ((name = g_dir_read_name(dir)) != NULL) { - if (load_module(name, indicator->menu)) + if (load_module(name, indicator)) indicators_loaded++; } g_dir_close (dir); @@ -120,8 +98,8 @@ indicator_new (XfcePanelPlugin *plugin) gtk_widget_show(indicator->item); gtk_container_add (GTK_CONTAINER (plugin), indicator->item); } else { - gtk_widget_show(indicator->menu); - gtk_container_add (GTK_CONTAINER (plugin), indicator->menu); + gtk_widget_show(GTK_WIDGET(indicator->buttonbox)); + gtk_container_add (GTK_CONTAINER (plugin), GTK_WIDGET(indicator->buttonbox)); } return indicator; } @@ -151,8 +129,7 @@ indicator_orientation_changed (XfcePanelPlugin *plugin, IndicatorPlugin *indicator) { gint sizex=-1, sizey=-1; - gtk_menu_bar_set_pack_direction (GTK_MENU_BAR(indicator->menu), - orientation == GTK_ORIENTATION_HORIZONTAL ? GTK_PACK_DIRECTION_LTR : GTK_PACK_DIRECTION_TTB ); + gtk_orientable_set_orientation (GTK_ORIENTABLE(indicator->buttonbox), orientation); gtk_widget_get_size_request (GTK_WIDGET (plugin), &sizex, &sizey); gtk_widget_set_size_request (GTK_WIDGET (plugin), sizey, sizex); } @@ -179,21 +156,37 @@ indicator_size_changed (XfcePanelPlugin *plugin, return TRUE; } +static gboolean +on_button_press (GtkWidget *widget, GdkEventButton *event, IndicatorPlugin *indicator) +{ + if (event->button == 1) /* left click only */ + { + gtk_menu_popup (GTK_MENU(g_object_get_data (G_OBJECT(widget),"menu")), NULL, + NULL, NULL, NULL, 1, event->time); + /* no approvement to the above */ + /* + gtk_menu_popup (GTK_MENU(g_object_get_data (G_OBJECT(widget),"menu")), NULL, NULL, + xfce_panel_plugin_position_menu, + indicator->plugin, 1, gtk_get_current_event_time ()); + */ + return TRUE; + } + return FALSE ; +} +#if FALSE static gboolean on_menu_press (GtkWidget *widget, GdkEventButton *event, IndicatorPlugin *indicator) { - TRACE ("enters on_button_press"); if (indicator != NULL && event->button == 1) /* left click only */ { /* gtk_menu_popup (GTK_MENU(indicator->menu), NULL, NULL, NULL, NULL, 0, event->time);*/ return TRUE; } - TRACE ("leaves on_button_press"); return FALSE ; } - +#endif static void indicator_construct (XfcePanelPlugin *plugin) { @@ -206,7 +199,7 @@ indicator_construct (XfcePanelPlugin *plugin) indicator = indicator_new (plugin); /* show the panel's right-click menu on this menu */ - xfce_panel_plugin_add_action_widget (plugin, indicator->menu); + xfce_panel_plugin_add_action_widget (plugin, indicator->buttonbox); xfce_panel_plugin_add_action_widget (plugin, indicator->item); /* connect plugin signals */ @@ -242,23 +235,32 @@ entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_d GtkWidget * menuitem = gtk_menu_item_new(); gtk_widget_set_name(GTK_WIDGET (menuitem), "indicator-plugin-menuitem"); GtkWidget * hbox = gtk_hbox_new(FALSE, 3); + GtkWidget * button = gtk_button_new(); + gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); + gtk_widget_set_name(GTK_WIDGET (button), "indicator-button"); g_signal_connect(G_OBJECT(menuitem), "scroll-event", G_CALLBACK(entry_scrolled), entry); if (entry->image != NULL) gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(entry->image), FALSE, FALSE, 0); + gtk_button_set_image(GTK_BUTTON(button), GTK_WIDGET(entry->image)); if (entry->label != NULL) gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(entry->label), FALSE, FALSE, 0); + gtk_button_set_label(GTK_BUTTON(button), gtk_label_get_label (entry->label)); gtk_container_add(GTK_CONTAINER(menuitem), hbox); gtk_widget_show(hbox); if (entry->menu != NULL) gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), GTK_WIDGET(entry->menu)); + g_object_set_data(G_OBJECT(button), "menu", entry->menu); - gtk_menu_shell_append(GTK_MENU_SHELL(user_data), menuitem); gtk_widget_show(menuitem); + g_signal_connect(button, "button-press-event", G_CALLBACK(on_button_press), + user_data); + gtk_widget_show(button); + gtk_box_pack_start(GTK_BOX(((IndicatorPlugin *)user_data)->buttonbox), button, TRUE, TRUE, 0); g_object_set_data(G_OBJECT(menuitem), "indicator-custom-object-data", io); g_object_set_data(G_OBJECT(menuitem), "indicator-custom-entry-data", entry); @@ -285,7 +287,7 @@ entry_removed (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user static gboolean -load_module (const gchar * name, GtkWidget * menu) +load_module (const gchar * name, IndicatorPlugin * indicator) { g_debug("Looking at Module: %s", name); g_return_val_if_fail(name != NULL, FALSE); @@ -300,16 +302,16 @@ load_module (const gchar * name, GtkWidget * menu) g_free(fullpath); g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, - G_CALLBACK(entry_added), menu); + G_CALLBACK(entry_added), indicator); g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, - G_CALLBACK(entry_removed), menu); + G_CALLBACK(entry_removed), indicator->buttonbox); GList * entries = indicator_object_get_entries(io); GList * entry = NULL; for (entry = entries; entry != NULL; entry = g_list_next(entry)) { IndicatorObjectEntry * entrydata = (IndicatorObjectEntry *)entry->data; - entry_added(io, entrydata, menu); + entry_added(io, entrydata, indicator); } g_list_free(entries); diff --git a/panel-plugin/indicator.h b/panel-plugin/indicator.h index a6b12d3..3c87faf 100644 --- a/panel-plugin/indicator.h +++ b/panel-plugin/indicator.h @@ -25,9 +25,9 @@ typedef struct { XfcePanelPlugin *plugin; - /* panel widgets */ - GtkWidget *menu; + /* panel widgets */ GtkWidget *item; + GtkWidget *buttonbox; /* indicator settings */ } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits