SF.net SVN: geany:[3215] trunk/plugins/splitwindow.c

ntrel at users.sourceforge.net ntrel at xxxxx
Wed Nov 12 16:21:32 UTC 2008


Revision: 3215
          http://geany.svn.sourceforge.net/geany/?rev=3215&view=rev
Author:   ntrel
Date:     2008-11-12 16:21:32 +0000 (Wed, 12 Nov 2008)

Log Message:
-----------
Add Split Vertically command (patch by Moritz Barsnick, thanks;
#2219553).

Modified Paths:
--------------
    trunk/plugins/splitwindow.c

Modified: trunk/plugins/splitwindow.c
===================================================================
--- trunk/plugins/splitwindow.c	2008-11-12 13:39:35 UTC (rev 3214)
+++ trunk/plugins/splitwindow.c	2008-11-12 16:21:32 UTC (rev 3215)
@@ -49,7 +49,7 @@
 enum State
 {
 	STATE_SPLIT_HORIZONTAL,
-	/* STATE_SPLIT_VERTICAL, */
+	STATE_SPLIT_VERTICAL,
 	STATE_UNSPLIT,
 	STATE_COUNT
 };
@@ -58,6 +58,7 @@
 {
 	GtkWidget *main;
 	GtkWidget *horizontal;
+	GtkWidget *vertical;
 	GtkWidget *unsplit;
 }
 menu_items;
@@ -201,7 +202,9 @@
 static void set_state(enum State id)
 {
 	gtk_widget_set_sensitive(menu_items.horizontal,
-		id != STATE_SPLIT_HORIZONTAL);
+		(id != STATE_SPLIT_HORIZONTAL) && (id != STATE_SPLIT_VERTICAL));
+	gtk_widget_set_sensitive(menu_items.vertical,
+		(id != STATE_SPLIT_HORIZONTAL) && (id != STATE_SPLIT_VERTICAL));
 	gtk_widget_set_sensitive(menu_items.unsplit,
 		id != STATE_UNSPLIT);
 
@@ -276,25 +279,26 @@
 }
 
 
-static void on_split_view(GtkMenuItem *menuitem, gpointer user_data)
+static void split_view(gboolean horizontal)
 {
 	GtkWidget *notebook = geany_data->main_widgets->notebook;
 	GtkWidget *parent = gtk_widget_get_parent(notebook);
 	GtkWidget *pane, *toolbar, *box;
 	GeanyDocument *doc = p_document->get_current();
 	gint width = notebook->allocation.width / 2;
+	gint height = notebook->allocation.height / 2;
 
-	set_state(STATE_SPLIT_HORIZONTAL);
-
 	g_return_if_fail(doc);
 	g_return_if_fail(edit_window.editor == NULL);
 
+	set_state(horizontal ? STATE_SPLIT_HORIZONTAL : STATE_SPLIT_VERTICAL);
+
 	/* temporarily put document notebook in main vbox (scintilla widgets must stay
 	 * in a visible parent window, otherwise there are X selection and scrollbar issues) */
 	gtk_widget_reparent(notebook,
 		p_support->lookup_widget(geany->main_widgets->window, "vbox1"));
 
-	pane = gtk_hpaned_new();
+	pane = horizontal ? gtk_hpaned_new() : gtk_vpaned_new();
 	gtk_container_add(GTK_CONTAINER(parent), pane);
 	gtk_widget_reparent(notebook, pane);
 
@@ -306,11 +310,30 @@
 
 	set_editor(&edit_window, doc->editor);
 
-	gtk_paned_set_position(GTK_PANED(pane), width);
+	if (horizontal)
+	{
+		gtk_paned_set_position(GTK_PANED(pane), width);
+	}
+	else
+	{
+		gtk_paned_set_position(GTK_PANED(pane), height);
+	}
 	gtk_widget_show_all(pane);
 }
 
 
+static void on_split_horizontally(GtkMenuItem *menuitem, gpointer user_data)
+{
+	split_view(TRUE);
+}
+
+
+static void on_split_vertically(GtkMenuItem *menuitem, gpointer user_data)
+{
+	split_view(FALSE);
+}
+
+
 static void on_unsplit(GtkMenuItem *menuitem, gpointer user_data)
 {
 	GtkWidget *notebook = geany_data->main_widgets->notebook;
@@ -346,9 +369,14 @@
 
 	menu_items.horizontal = item =
 		gtk_menu_item_new_with_mnemonic(_("_Horizontally"));
-	g_signal_connect(item, "activate", G_CALLBACK(on_split_view), NULL);
+	g_signal_connect(item, "activate", G_CALLBACK(on_split_horizontally), NULL);
 	gtk_menu_append(menu, item);
 
+	menu_items.vertical = item =
+		gtk_menu_item_new_with_mnemonic(_("_Vertically"));
+	g_signal_connect(item, "activate", G_CALLBACK(on_split_vertically), NULL);
+	gtk_menu_append(menu, item);
+
 	menu_items.unsplit = item =
 		gtk_menu_item_new_with_mnemonic(_("_Unsplit"));
 	g_signal_connect(item, "activate", G_CALLBACK(on_unsplit), 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