Revision: 3615 http://geany.svn.sourceforge.net/geany/?rev=3615&view=rev Author: eht16 Date: 2009-03-02 20:34:31 +0000 (Mon, 02 Mar 2009)
Log Message: ----------- Disable the default tab bar menu for the main notebook widget and use a custom menu instead which lists all open files as usual plus 'Close Other Documents' and 'Close All' menu items. Remove GeanyDocumentPrivate::tabmenu_label.
Modified Paths: -------------- trunk/ChangeLog trunk/geany.glade trunk/src/document.c trunk/src/documentprivate.h trunk/src/interface.c trunk/src/notebook.c trunk/src/ui_utils.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/ChangeLog 2009-03-02 20:34:31 UTC (rev 3615) @@ -4,6 +4,12 @@ Adjust minimum required GTK version. * src/Makefile.am, wscript: Add main.h to the list of installed header files. + * geany.glade, src/document.c, src/documentprivate.h, src/interface.c, + src/notebook.c, src/ui_utils.c: + Remove GeanyDocumentPrivate::tabmenu_label. + Disable the default tab bar menu for the main notebook widget and + use a custom menu instead which lists all open files as usual plus + 'Close Other Documents' and 'Close All' menu items.
2009-02-27 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/geany.glade =================================================================== --- trunk/geany.glade 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/geany.glade 2009-03-02 20:34:31 UTC (rev 3615) @@ -1766,7 +1766,7 @@ <property name="show_border">True</property> <property name="tab_pos">GTK_POS_TOP</property> <property name="scrollable">True</property> - <property name="enable_popup">True</property> + <property name="enable_popup">False</property> <signal name="switch_page" handler="on_notebook1_switch_page_after" after="yes" last_modification_time="Fri, 26 May 2006 11:47:25 GMT"/> </widget> <packing>
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/src/document.c 2009-03-02 20:34:31 UTC (rev 3615) @@ -296,7 +296,6 @@ parent = gtk_widget_get_parent(parent);
gtk_label_set_text(GTK_LABEL(doc->priv->tab_label), base_name); - gtk_label_set_text(GTK_LABEL(doc->priv->tabmenu_label), base_name);
ui_widget_set_tooltip_text(parent, DOC_FILENAME(doc));
Modified: trunk/src/documentprivate.h =================================================================== --- trunk/src/documentprivate.h 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/src/documentprivate.h 2009-03-02 20:34:31 UTC (rev 3615) @@ -61,8 +61,6 @@ { /* GtkLabel shown in the notebook header. */ GtkWidget *tab_label; - /* GtkLabel shown in the notebook right-click menu. */ - GtkWidget *tabmenu_label; /* GtkTreeView object for this %document within the Symbols treeview of the sidebar. */ GtkWidget *tag_tree; /* GtkTreeStore object for this %document within the Symbols treeview of the sidebar. */
Modified: trunk/src/interface.c =================================================================== --- trunk/src/interface.c 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/src/interface.c 2009-03-02 20:34:31 UTC (rev 3615) @@ -1082,7 +1082,6 @@ gtk_widget_show (notebook1); gtk_paned_pack2 (GTK_PANED (hpaned1), notebook1, TRUE, TRUE); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), TRUE); - gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook1));
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow1);
Modified: trunk/src/notebook.c =================================================================== --- trunk/src/notebook.c 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/src/notebook.c 2009-03-02 20:34:31 UTC (rev 3615) @@ -179,6 +179,73 @@ }
+static void tab_bar_menu_activate_cb(GtkMenuItem *menuitem, gpointer data) +{ + GeanyDocument *doc = data; + + if (! DOC_VALID(doc)) + return; + + gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), + document_get_notebook_page(doc)); +} + + +static GtkMenu *get_tab_bar_popup_menu(void) +{ + static GtkWidget *menu = NULL; + GtkWidget *menu_item, *menu_item_label; + const GdkColor *color; + GeanyDocument *doc; + guint i, len; + gchar *base_name; + + if (menu == NULL) + menu = gtk_menu_new(); + + /* clear the old menu items */ + gtk_container_foreach(GTK_CONTAINER(menu), (GtkCallback) gtk_widget_destroy, NULL); + + len = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)); + for (i = 0; i < len; i++) + { + doc = document_get_from_page(i); + if (! DOC_VALID(doc)) + continue; + + base_name = g_path_get_basename(doc->file_name); + menu_item = gtk_image_menu_item_new_with_label(base_name); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), + gtk_image_new_from_icon_name(GTK_STOCK_FILE, GTK_ICON_SIZE_MENU)); + gtk_widget_show(menu_item); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + g_signal_connect(menu_item, "activate", G_CALLBACK(tab_bar_menu_activate_cb), doc); + + color = document_get_status_color(doc); + menu_item_label = gtk_bin_get_child(GTK_BIN(menu_item)); + gtk_widget_modify_fg(menu_item_label, GTK_STATE_NORMAL, color); + gtk_widget_modify_fg(menu_item_label, GTK_STATE_ACTIVE, color); + + g_free(base_name); + } + menu_item = gtk_separator_menu_item_new(); + gtk_widget_show(menu_item); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + + menu_item = ui_image_menu_item_new(GTK_STOCK_CLOSE, _("Close Ot_her Documents")); + gtk_widget_show(menu_item); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + g_signal_connect(menu_item, "activate", G_CALLBACK(on_close_other_documents1_activate), NULL); + + menu_item = ui_image_menu_item_new(GTK_STOCK_CLOSE, _("C_lose All")); + gtk_widget_show(menu_item); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + g_signal_connect(menu_item, "activate", G_CALLBACK(on_close_all1_activate), NULL); + + return GTK_MENU(menu); +} + + static gboolean notebook_tab_bar_click_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { @@ -195,6 +262,11 @@ return TRUE; } } + else if (event->button == 3) + { + gtk_menu_popup(get_tab_bar_popup_menu(), NULL, NULL, + NULL, NULL, event->button, event->time); + } return FALSE; }
@@ -452,17 +524,14 @@
gtk_widget_show_all(ebox);
- this->priv->tabmenu_label = gtk_label_new(NULL); - gtk_misc_set_alignment(GTK_MISC(this->priv->tabmenu_label), 0.0, 0); - document_update_tab_label(this);
if (file_prefs.tab_order_ltr) tabnum = gtk_notebook_append_page_menu(GTK_NOTEBOOK(main_widgets.notebook), page, - ebox, this->priv->tabmenu_label); + ebox, NULL); else tabnum = gtk_notebook_insert_page_menu(GTK_NOTEBOOK(main_widgets.notebook), page, - ebox, this->priv->tabmenu_label, 0); + ebox, NULL, 0);
tab_count_changed();
Modified: trunk/src/ui_utils.c =================================================================== --- trunk/src/ui_utils.c 2009-03-02 20:34:06 UTC (rev 3614) +++ trunk/src/ui_utils.c 2009-03-02 20:34:31 UTC (rev 3615) @@ -1333,8 +1333,6 @@ /* NULL color will reset to default */ gtk_widget_modify_fg(doc->priv->tab_label, GTK_STATE_NORMAL, color); gtk_widget_modify_fg(doc->priv->tab_label, GTK_STATE_ACTIVE, color); - gtk_widget_modify_fg(doc->priv->tabmenu_label, GTK_STATE_NORMAL, color); - gtk_widget_modify_fg(doc->priv->tabmenu_label, GTK_STATE_ACTIVE, color);
treeviews_openfiles_update(doc); }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.