SF.net SVN: geany:[2934] branches/split-window-plugin
ntrel at users.sourceforge.net
ntrel at xxxxx
Wed Sep 10 14:29:17 UTC 2008
Revision: 2934
http://geany.svn.sourceforge.net/geany/?rev=2934&view=rev
Author: ntrel
Date: 2008-09-10 14:29:16 +0000 (Wed, 10 Sep 2008)
Log Message:
-----------
Add Unsplit command.
Clean up menus and split window when unloading plugin.
Modified Paths:
--------------
branches/split-window-plugin/ChangeLog
branches/split-window-plugin/plugins/splitwindow.c
Modified: branches/split-window-plugin/ChangeLog
===================================================================
--- branches/split-window-plugin/ChangeLog 2008-09-10 11:30:34 UTC (rev 2933)
+++ branches/split-window-plugin/ChangeLog 2008-09-10 14:29:16 UTC (rev 2934)
@@ -1,3 +1,10 @@
+2008-09-10 Nick Treleaven <nmt at localhost.localdomain>
+
+ * plugins/splitwindow.c:
+ Add Unsplit command.
+ Clean up menus and split window when unloading plugin.
+
+
2008-08-26 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/plugindata.h, src/plugins.c, po/POTFILES.in,
Modified: branches/split-window-plugin/plugins/splitwindow.c
===================================================================
--- branches/split-window-plugin/plugins/splitwindow.c 2008-09-10 11:30:34 UTC (rev 2933)
+++ branches/split-window-plugin/plugins/splitwindow.c 2008-09-10 14:29:16 UTC (rev 2934)
@@ -40,6 +40,17 @@
GeanyData *geany_data;
GeanyFunctions *geany_functions;
+enum Command
+{
+ ITEM_SPLIT_HORIZONTAL,
+ /* ITEM_SPLIT_VERTICAL, */
+ ITEM_UNSPLIT,
+ ITEM_COUNT
+};
+
+static GtkWidget *menu_items_array[ITEM_COUNT];
+static GtkWidget **menu_items = menu_items_array; /* avoid gcc warning when casting to (gpointer*) */
+static enum Command plugin_state;
static GeanyEditor *our_editor = NULL;
@@ -90,6 +101,7 @@
}
+/* TODO: maybe use SCI_STYLEGET(FONT|SIZE) instead */
static void update_font(ScintillaObject *sci, const gchar *font_name, gint size)
{
gchar *fname;
@@ -145,15 +157,28 @@
}
-static void on_split_view(GtkMenuItem *menuitem, GeanyData *data)
+static void set_state(enum Command id)
{
- GtkWidget *notebook = data->main_widgets->notebook;
+ gtk_widget_set_sensitive(menu_items[ITEM_SPLIT_HORIZONTAL],
+ id != ITEM_SPLIT_HORIZONTAL);
+ gtk_widget_set_sensitive(menu_items[ITEM_UNSPLIT],
+ id != ITEM_UNSPLIT);
+
+ plugin_state = id;
+}
+
+
+static void on_split_view(GtkMenuItem *menuitem, gpointer user_data)
+{
+ GtkWidget *notebook = geany_data->main_widgets->notebook;
GtkWidget *parent = gtk_widget_get_parent(notebook);
GtkWidget *pane;
GeanyDocument *doc = p_document->get_current();
ScintillaObject *sci;
gpointer sdoc;
+ set_state(ITEM_SPLIT_HORIZONTAL);
+
g_return_if_fail(doc);
g_return_if_fail(our_editor == NULL);
@@ -176,19 +201,69 @@
}
-void plugin_init(GeanyData *data)
+static void on_unsplit(GtkMenuItem *menuitem, gpointer user_data)
{
- GtkWidget *item = gtk_menu_item_new_with_mnemonic(_("_Split Horizontally"));
+ GtkWidget *notebook = geany_data->main_widgets->notebook;
+ GtkWidget *pane = gtk_widget_get_parent(notebook);
+ GtkWidget *parent = gtk_widget_get_parent(pane);
+ set_state(ITEM_UNSPLIT);
+
+ g_return_if_fail(our_editor);
+
+ /* reparent document notebook */
+ g_object_ref(notebook);
+ gtk_container_remove(GTK_CONTAINER(pane), notebook);
+ gtk_widget_destroy(pane);
+ p_editor->destroy(our_editor);
+ our_editor = NULL;
+ gtk_container_add(GTK_CONTAINER(parent), notebook);
+ g_object_unref(notebook);
+}
+
+
+static void foreach_pointer(gpointer *items, gsize count, GFunc func, gpointer user_data)
+{
+ gsize i;
+
+ for (i = 0; i < count; i++)
+ {
+ func(items[i], user_data);
+ }
+}
+
+
+static void add_menu_item(gpointer data, gpointer user_data)
+{
+ GtkWidget *item = data;
+
gtk_widget_show(item);
- gtk_menu_append(data->main_widgets->tools_menu, item);
- g_signal_connect(item, "activate", G_CALLBACK(on_split_view), data);
+ gtk_menu_append(geany_data->main_widgets->tools_menu, item);
}
+void plugin_init(GeanyData *data)
+{
+ GtkWidget *item;
+
+ menu_items[ITEM_SPLIT_HORIZONTAL] = item =
+ gtk_menu_item_new_with_mnemonic(_("Split _Horizontally"));
+ g_signal_connect(item, "activate", G_CALLBACK(on_split_view), NULL);
+
+ menu_items[ITEM_UNSPLIT] = item =
+ gtk_menu_item_new_with_mnemonic(_("_Unsplit"));
+ g_signal_connect(item, "activate", G_CALLBACK(on_unsplit), NULL);
+
+ foreach_pointer((gpointer*)menu_items, ITEM_COUNT, add_menu_item, NULL);
+
+ set_state(ITEM_UNSPLIT);
+}
+
+
void plugin_cleanup()
{
- if (our_editor)
- p_editor->destroy(our_editor);
- /* TODO: reparent doc notebook etc */
+ if (plugin_state != ITEM_UNSPLIT)
+ on_unsplit(NULL, NULL);
+
+ foreach_pointer((gpointer*)menu_items, ITEM_COUNT, (GFunc)gtk_widget_destroy, NULL);
}
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