SF.net SVN: geany:[4308] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Oct 13 17:14:25 UTC 2009
Revision: 4308
http://geany.svn.sourceforge.net/geany/?rev=4308&view=rev
Author: ntrel
Date: 2009-10-13 17:14:25 +0000 (Tue, 13 Oct 2009)
Log Message:
-----------
Make Split Window 'Show current document' button have a drop-down menu
to select the other documents.
Add new API function ui_menu_add_document_items().
Modified Paths:
--------------
trunk/ChangeLog
trunk/plugins/geanyfunctions.h
trunk/plugins/splitwindow.c
trunk/src/notebook.c
trunk/src/plugindata.h
trunk/src/plugins.c
trunk/src/ui_utils.c
trunk/src/ui_utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/ChangeLog 2009-10-13 17:14:25 UTC (rev 4308)
@@ -1,3 +1,12 @@
+2009-10-13 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/notebook.c, src/plugindata.h, src/plugins.c, src/ui_utils.c,
+ src/ui_utils.h, plugins/geanyfunctions.h, plugins/splitwindow.c:
+ Make Split Window 'Show current document' button have a drop-down menu
+ to select the other documents.
+ Add new API function ui_menu_add_document_items().
+
+
2009-10-13 Lex Trotman <elextr(at)gmail(dot)com>
* src/build.c:
Modified: trunk/plugins/geanyfunctions.h
===================================================================
--- trunk/plugins/geanyfunctions.h 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/plugins/geanyfunctions.h 2009-10-13 17:14:25 UTC (rev 4308)
@@ -244,6 +244,8 @@
geany_functions->p_ui->progress_bar_stop
#define ui_entry_add_clear_icon \
geany_functions->p_ui->entry_add_clear_icon
+#define ui_menu_add_document_items \
+ geany_functions->p_ui->menu_add_document_items
#define dialogs_show_question \
geany_functions->p_dialogs->show_question
#define dialogs_show_msgbox \
Modified: trunk/plugins/splitwindow.c
===================================================================
--- trunk/plugins/splitwindow.c 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/plugins/splitwindow.c 2009-10-13 17:14:25 UTC (rev 4308)
@@ -263,6 +263,23 @@
}
+static void on_doc_menu_item_clicked(gpointer item, GeanyDocument *doc)
+{
+ if (doc->is_valid)
+ set_editor(&edit_window, doc->editor);
+}
+
+
+static void on_doc_menu_show(GtkMenu *menu)
+{
+ /* clear the old menu items */
+ gtk_container_foreach(GTK_CONTAINER(menu), (GtkCallback) gtk_widget_destroy, NULL);
+
+ ui_menu_add_document_items(menu, edit_window.editor->document,
+ G_CALLBACK(on_doc_menu_item_clicked));
+}
+
+
static GtkWidget *create_toolbar(void)
{
GtkWidget *toolbar, *item;
@@ -272,11 +289,17 @@
gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_MENU);
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
- item = ui_tool_button_new(GTK_STOCK_JUMP_TO, "",
- _("Show the current document"));
+ tool_item = gtk_menu_tool_button_new(NULL, NULL);
+ gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(tool_item), GTK_STOCK_JUMP_TO);
+ item = (GtkWidget*)tool_item;
+ ui_widget_set_tooltip_text(item, _("Show the current document"));
gtk_container_add(GTK_CONTAINER(toolbar), item);
g_signal_connect(item, "clicked", G_CALLBACK(on_refresh), NULL);
+ item = gtk_menu_new();
+ gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(tool_item), item);
+ g_signal_connect(item, "show", G_CALLBACK(on_doc_menu_show), NULL);
+
tool_item = gtk_tool_item_new();
gtk_tool_item_set_expand(tool_item, TRUE);
gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(tool_item));
Modified: trunk/src/notebook.c
===================================================================
--- trunk/src/notebook.c 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/src/notebook.c 2009-10-13 17:14:25 UTC (rev 4308)
@@ -192,45 +192,20 @@
}
-static GtkMenu *get_tab_bar_popup_menu(void)
+static void show_tab_bar_popup_menu(GdkEventButton *event)
{
+ GtkWidget *menu_item;
static GtkWidget *menu = NULL;
- GtkWidget *menu_item, *menu_item_label;
- const GdkColor *color;
- GeanyDocument *doc;
- guint i, len;
- gchar *base_name;
- GeanyDocument *current_doc = document_get_current();
- if (G_UNLIKELY(menu == NULL))
+ 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;
+ ui_menu_add_document_items(GTK_MENU(menu), document_get_current(),
+ G_CALLBACK(tab_bar_menu_activate_cb));
- base_name = g_path_get_basename(DOC_FILENAME(doc));
- menu_item = gtk_menu_item_new_with_label(base_name);
- 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);
-
- if (doc == current_doc)
- ui_label_set_markup(GTK_LABEL(menu_item_label), "<b>%s</b>", base_name);
-
- g_free(base_name);
- }
menu_item = gtk_separator_menu_item_new();
gtk_widget_show(menu_item);
gtk_container_add(GTK_CONTAINER(menu), menu_item);
@@ -245,7 +220,7 @@
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);
+ gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
}
@@ -267,8 +242,7 @@
}
else if (event->button == 3)
{
- gtk_menu_popup(get_tab_bar_popup_menu(), NULL, NULL,
- NULL, NULL, event->button, event->time);
+ show_tab_bar_popup_menu(event);
}
return FALSE;
}
Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/src/plugindata.h 2009-10-13 17:14:25 UTC (rev 4308)
@@ -50,7 +50,7 @@
enum {
/** The Application Programming Interface (API) version, incremented
* whenever any plugin data types are modified or appended to. */
- GEANY_API_VERSION = 159,
+ GEANY_API_VERSION = 160,
/** The Application Binary Interface (ABI) version, incremented whenever
* existing fields in the plugin data types have to be changed or reordered. */
@@ -408,10 +408,7 @@
{
GtkWidget* (*dialog_vbox_new) (GtkDialog *dialog);
GtkWidget* (*frame_new_with_alignment) (const gchar *label_text, GtkWidget **alignment);
-
- /* set_statusbar() also appends to the message window status tab if log is TRUE. */
void (*set_statusbar) (gboolean log, const gchar *format, ...) G_GNUC_PRINTF (2, 3);
-
void (*table_add_row) (GtkTable *table, gint row, ...) G_GNUC_NULL_TERMINATED;
GtkWidget* (*path_box_new) (const gchar *title, GtkFileChooserAction action, GtkEntry *entry);
GtkWidget* (*button_new_with_image) (const gchar *stock_id, const gchar *text);
@@ -422,6 +419,8 @@
void (*progress_bar_start) (const gchar *text);
void (*progress_bar_stop) (void);
void (*entry_add_clear_icon) (GtkEntry *entry);
+ void (*menu_add_document_items) (GtkMenu *menu, struct GeanyDocument *active,
+ GCallback callback);
}
UIUtilsFuncs;
Modified: trunk/src/plugins.c
===================================================================
--- trunk/src/plugins.c 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/src/plugins.c 2009-10-13 17:14:25 UTC (rev 4308)
@@ -218,7 +218,8 @@
&ui_lookup_widget,
&ui_progress_bar_start,
&ui_progress_bar_stop,
- &ui_entry_add_clear_icon
+ &ui_entry_add_clear_icon,
+ &ui_menu_add_document_items
};
static DialogFuncs dialog_funcs = {
Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/src/ui_utils.c 2009-10-13 17:14:25 UTC (rev 4308)
@@ -2108,3 +2108,43 @@
}
+/** Add a list of document items to @a menu.
+ * @param menu Menu.
+ * @param active Which document to highlight, or @c NULL.
+ * @param callback is used for each menu item's @c "activate" signal and will be passed
+ * the corresponding document pointer as @c user_data.
+ * @warning You should check @c doc->is_valid in the callback. */
+void ui_menu_add_document_items(GtkMenu *menu, GeanyDocument *active, GCallback callback)
+{
+ GtkWidget *menu_item, *menu_item_label;
+ const GdkColor *color;
+ GeanyDocument *doc;
+ guint i, len;
+ gchar *base_name;
+
+ 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_FILENAME(doc));
+ menu_item = gtk_menu_item_new_with_label(base_name);
+ gtk_widget_show(menu_item);
+ gtk_container_add(GTK_CONTAINER(menu), menu_item);
+ g_signal_connect(menu_item, "activate", callback, 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);
+
+ if (doc == active)
+ ui_label_set_markup(GTK_LABEL(menu_item_label), "<b>%s</b>", base_name);
+
+ g_free(base_name);
+ }
+}
+
+
Modified: trunk/src/ui_utils.h
===================================================================
--- trunk/src/ui_utils.h 2009-10-12 23:54:47 UTC (rev 4307)
+++ trunk/src/ui_utils.h 2009-10-13 17:14:25 UTC (rev 4308)
@@ -216,7 +216,9 @@
void ui_add_config_file_menu_item(const gchar *real_path, const gchar *label,
GtkContainer *parent);
+void ui_menu_add_document_items(GtkMenu *menu, GeanyDocument *active, GCallback callback);
+
void ui_set_statusbar(gboolean log, const gchar *format, ...) G_GNUC_PRINTF (2, 3);
void ui_update_statusbar(GeanyDocument *doc, gint pos);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list