Created
April 24, 2015 01:06
-
-
Save anonymous/959cd4a1367680b4c6a5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -rupN Thunar-1.6.7/thunar/thunar-standard-view.c Thunar-1.6.7-splitview/thunar/thunar-standard-view.c | |
--- Thunar-1.6.7/thunar/thunar-standard-view.c 2015-04-18 16:25:18.000000000 +0200 | |
+++ Thunar-1.6.7-splitview/thunar/thunar-standard-view.c 2015-04-24 02:08:46.234849486 +0200 | |
@@ -4262,8 +4262,8 @@ thunar_standard_view_queue_popup (Thunar | |
standard_view, thunar_standard_view_drag_timer_destroy); | |
/* register the motion notify and the button release events on the real view */ | |
- g_signal_connect (G_OBJECT (view), "button-release-event", G_CALLBACK (thunar_standard_view_button_release_event), standard_view); | |
- g_signal_connect (G_OBJECT (view), "motion-notify-event", G_CALLBACK (thunar_standard_view_motion_notify_event), standard_view); | |
+ g_signal_connect_after (G_OBJECT (view), "button-release-event", G_CALLBACK (thunar_standard_view_button_release_event), standard_view); | |
+ g_signal_connect_after (G_OBJECT (view), "motion-notify-event", G_CALLBACK (thunar_standard_view_motion_notify_event), standard_view); | |
} | |
} | |
diff -rupN Thunar-1.6.7/thunar/thunar-window.c Thunar-1.6.7-splitview/thunar/thunar-window.c | |
--- Thunar-1.6.7/thunar/thunar-window.c 2015-04-18 16:25:18.000000000 +0200 | |
+++ Thunar-1.6.7-splitview/thunar/thunar-window.c 2015-04-24 02:28:18.421547235 +0200 | |
@@ -81,6 +81,7 @@ enum | |
enum | |
{ | |
BACK, | |
+ PANE_WINDOW, | |
RELOAD, | |
TOGGLE_SIDEPANE, | |
TOGGLE_MENUBAR, | |
@@ -104,6 +105,7 @@ static void thunar_window_set_proper | |
const GValue *value, | |
GParamSpec *pspec); | |
static gboolean thunar_window_back (ThunarWindow *window); | |
+static gboolean thunar_window_pane_window (ThunarWindow *window); | |
static gboolean thunar_window_reload (ThunarWindow *window, | |
gboolean reload_info); | |
static gboolean thunar_window_toggle_sidepane (ThunarWindow *window); | |
@@ -249,6 +251,9 @@ static gboolean thunar_window_save_geome | |
static void thunar_window_save_geometry_timer_destroy (gpointer user_data); | |
static void thunar_window_set_zoom_level (ThunarWindow *window, | |
ThunarZoomLevel zoom_level); | |
+static gboolean thunar_window_notebook_select (GtkWidget *notebook, | |
+ GdkEvent *event, | |
+ ThunarWindow *window); | |
@@ -258,6 +263,7 @@ struct _ThunarWindowClass | |
/* internal action signals */ | |
gboolean (*back) (ThunarWindow *window); | |
+ gboolean (*pane_window) (ThunarWindow *window); | |
gboolean (*reload) (ThunarWindow *window, | |
gboolean reload_info); | |
gboolean (*toggle_sidepane) (ThunarWindow *window); | |
@@ -311,9 +317,12 @@ struct _ThunarWindow | |
GtkWidget *menubar; | |
GtkWidget *spinner; | |
GtkWidget *paned; | |
+ GtkWidget *panes; | |
GtkWidget *sidepane; | |
GtkWidget *view_box; | |
GtkWidget *notebook; | |
+ GtkWidget *notebook1; | |
+ GtkWidget *notebook2; | |
GtkWidget *view; | |
GtkWidget *statusbar; | |
@@ -420,6 +429,7 @@ thunar_window_class_init (ThunarWindowCl | |
gtkwidget_class->configure_event = thunar_window_configure_event; | |
klass->back = thunar_window_back; | |
+ klass->pane_window = thunar_window_pane_window; | |
klass->reload = thunar_window_reload; | |
klass->toggle_sidepane = thunar_window_toggle_sidepane; | |
klass->toggle_menubar = thunar_window_toggle_menubar; | |
@@ -503,6 +513,23 @@ thunar_window_class_init (ThunarWindowCl | |
G_TYPE_BOOLEAN, 0); | |
/** | |
+ * ThunarWindow::pane-window: | |
+ * @window : a #ThunarWindow instance. | |
+ * | |
+ * Emitted whenever the user requests to pane the window | |
+ * of the currently displayed folder. This is an internal | |
+ * signal used to bind the action to keys. | |
+ **/ | |
+ window_signals[PANE_WINDOW] = | |
+ g_signal_new (I_("pane-window"), | |
+ G_TYPE_FROM_CLASS (klass), | |
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, | |
+ G_STRUCT_OFFSET (ThunarWindowClass, pane_window), | |
+ g_signal_accumulator_true_handled, NULL, | |
+ _thunar_marshal_BOOLEAN__VOID, | |
+ G_TYPE_BOOLEAN, 0); | |
+ | |
+ /** | |
* ThunarWindow::reload: | |
* @window : a #ThunarWindow instance. | |
* | |
@@ -623,6 +650,7 @@ thunar_window_class_init (ThunarWindowCl | |
/* setup the key bindings for the windows */ | |
binding_set = gtk_binding_set_by_class (klass); | |
gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, 0, "back", 0); | |
+ gtk_binding_entry_add_signal (binding_set, GDK_F3, 0, "pane-window", 0); | |
gtk_binding_entry_add_signal (binding_set, GDK_F5, 0, "reload", 0); | |
gtk_binding_entry_add_signal (binding_set, GDK_F9, 0, "toggle-sidepane", 0); | |
gtk_binding_entry_add_signal (binding_set, GDK_F10, 0, "toggle-menubar", 0); | |
@@ -861,31 +889,44 @@ thunar_window_init (ThunarWindow *window | |
g_signal_connect_swapped (window->paned, "button-release-event", G_CALLBACK (thunar_window_save_paned), window); | |
window->view_box = gtk_table_new (3, 1, FALSE); | |
- gtk_paned_pack2 (GTK_PANED (window->paned), window->view_box, TRUE, FALSE); | |
+ gtk_paned_add2 (GTK_PANED (window->paned), window->view_box); | |
gtk_widget_show (window->view_box); | |
+ /* Create panes when the notebook will be */ | |
+ window->panes = gtk_hpaned_new (); | |
+ gtk_widget_add_events (window->panes, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK); | |
+ gtk_table_attach (GTK_TABLE (window->view_box), window->panes, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); | |
+ gtk_widget_show (window->panes); | |
+ | |
/* tabs */ | |
- window->notebook = gtk_notebook_new (); | |
- gtk_table_attach (GTK_TABLE (window->view_box), window->notebook, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); | |
- g_signal_connect (G_OBJECT (window->notebook), "switch-page", G_CALLBACK (thunar_window_notebook_switch_page), window); | |
- g_signal_connect (G_OBJECT (window->notebook), "page-added", G_CALLBACK (thunar_window_notebook_page_added), window); | |
- g_signal_connect (G_OBJECT (window->notebook), "page-removed", G_CALLBACK (thunar_window_notebook_page_removed), window); | |
- g_signal_connect_after (G_OBJECT (window->notebook), "button-press-event", G_CALLBACK (thunar_window_notebook_button_press_event), window); | |
- g_signal_connect (G_OBJECT (window->notebook), "popup-menu", G_CALLBACK (thunar_window_notebook_popup_menu), window); | |
- g_signal_connect (G_OBJECT (window->notebook), "create-window", G_CALLBACK (thunar_window_notebook_create_window), window); | |
- gtk_notebook_set_show_border (GTK_NOTEBOOK (window->notebook), FALSE); | |
- gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK (window->notebook), TRUE); | |
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (window->notebook), TRUE); | |
- gtk_container_set_border_width (GTK_CONTAINER (window->notebook), 0); | |
- gtk_notebook_set_group_name (GTK_NOTEBOOK (window->notebook), "thunar-tabs"); | |
- gtk_widget_show (window->notebook); | |
+ // notebook1 | |
+ window->notebook1 = gtk_notebook_new (); | |
+ gtk_paned_pack1 (GTK_PANED (window->panes), window->notebook1, TRUE, FALSE); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "switch-page", G_CALLBACK (thunar_window_notebook_switch_page), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "page-added", G_CALLBACK (thunar_window_notebook_page_added), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "page-removed", G_CALLBACK (thunar_window_notebook_page_removed), window); | |
+ g_signal_connect_after (G_OBJECT (window->notebook1), "button-press-event", G_CALLBACK (thunar_window_notebook_button_press_event), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "popup-menu", G_CALLBACK (thunar_window_notebook_popup_menu), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "create-window", G_CALLBACK (thunar_window_notebook_create_window), window); | |
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (window->notebook1), FALSE); | |
+ gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK (window->notebook1), TRUE); | |
+ gtk_notebook_set_scrollable (GTK_NOTEBOOK (window->notebook1), TRUE); | |
+ gtk_container_set_border_width (GTK_CONTAINER (window->notebook1), 0); | |
+ gtk_notebook_set_group_name (GTK_NOTEBOOK (window->notebook1), "thunar-tabs"); | |
+ gtk_widget_show (window->notebook1); | |
/* drop the notebook borders */ | |
style = gtk_rc_style_new (); | |
style->xthickness = style->ythickness = 0; | |
- gtk_widget_modify_style (window->notebook, style); | |
+ gtk_widget_modify_style (window->notebook1, style); | |
g_object_unref (G_OBJECT (style)); | |
+ // notebook2 | |
+ window->notebook2 = NULL; | |
+ | |
+ /* The notebook selected and actived */ | |
+ window->notebook = window->notebook1; | |
+ | |
/* determine the selected location selector */ | |
if (exo_str_is_equal (last_location_bar, g_type_name (THUNAR_TYPE_LOCATION_BUTTONS))) | |
type = THUNAR_TYPE_LOCATION_BUTTONS; | |
@@ -1392,6 +1433,130 @@ thunar_window_binding_create (ThunarWind | |
+static gboolean | |
+thunar_window_pane_window (ThunarWindow *window) | |
+{ | |
+ ThunarFile *directory; | |
+ GtkRcStyle *style; | |
+ | |
+ _thunar_return_val_if_fail (THUNAR_IS_WINDOW (window), FALSE); | |
+ _thunar_return_val_if_fail (window->view_type != G_TYPE_NONE, FALSE); | |
+ | |
+ /* if two panes are showed then remove not selected one */ | |
+ if (window->notebook1 != NULL && window->notebook2 != NULL) | |
+ { | |
+ /* notebook1 is the selected notebook so it destroys notebook2 */ | |
+ if (window->notebook == window->notebook1) | |
+ { | |
+ gtk_widget_destroy (window->notebook2); | |
+ window->notebook2 = NULL; | |
+ } | |
+ /* notebook2 is the selected notebook so it destroys notebook1 */ | |
+ else | |
+ { | |
+ gtk_widget_destroy (window->notebook1); | |
+ window->notebook1 = NULL; | |
+ } | |
+ } | |
+ /* notebook1 is null so it crates it */ | |
+ else if (window->notebook1 == NULL) | |
+ { | |
+ /* create the notebook1 */ | |
+ window->notebook1 = gtk_notebook_new (); | |
+ gtk_paned_pack1 (GTK_PANED (window->panes), window->notebook1, TRUE, FALSE); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "switch-page", G_CALLBACK (thunar_window_notebook_switch_page), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "page-added", G_CALLBACK (thunar_window_notebook_page_added), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "page-removed", G_CALLBACK (thunar_window_notebook_page_removed), window); | |
+ g_signal_connect_after (G_OBJECT (window->notebook1), "button-press-event", G_CALLBACK (thunar_window_notebook_button_press_event), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "popup-menu", G_CALLBACK (thunar_window_notebook_popup_menu), window); | |
+ g_signal_connect (G_OBJECT (window->notebook1), "create-window", G_CALLBACK (thunar_window_notebook_create_window), window); | |
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (window->notebook1), FALSE); | |
+ gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK (window->notebook1), TRUE); | |
+ gtk_notebook_set_scrollable (GTK_NOTEBOOK (window->notebook1), TRUE); | |
+ gtk_container_set_border_width (GTK_CONTAINER (window->notebook1), 0); | |
+ gtk_notebook_set_group_name (GTK_NOTEBOOK (window->notebook1), "thunar-tabs"); | |
+ gtk_widget_show (window->notebook1); | |
+ | |
+ /* drop the notebook borders */ | |
+ style = gtk_rc_style_new (); | |
+ style->xthickness = style->ythickness = 0; | |
+ gtk_widget_modify_style (window->notebook1, style); | |
+ g_object_unref (G_OBJECT (style)); | |
+ | |
+ /* set notebook2 to selected notebook */ | |
+ window->notebook = window->notebook1; | |
+ directory = thunar_window_get_current_directory (window); | |
+ thunar_window_notebook_insert (window, directory); | |
+ } | |
+ /* Otherwise notebook2 is null so it creates it */ | |
+ else | |
+ { | |
+ /* create the notebook2 */ | |
+ window->notebook2 = gtk_notebook_new (); | |
+ gtk_paned_pack2 (GTK_PANED (window->panes), window->notebook2, TRUE, FALSE); | |
+ g_signal_connect (G_OBJECT (window->notebook2), "switch-page", G_CALLBACK (thunar_window_notebook_switch_page), window); | |
+ g_signal_connect (G_OBJECT (window->notebook2), "page-added", G_CALLBACK (thunar_window_notebook_page_added), window); | |
+ g_signal_connect (G_OBJECT (window->notebook2), "page-removed", G_CALLBACK (thunar_window_notebook_page_removed), window); | |
+ g_signal_connect_after (G_OBJECT (window->notebook2), "button-press-event", G_CALLBACK (thunar_window_notebook_button_press_event), window); | |
+ g_signal_connect (G_OBJECT (window->notebook2), "popup-menu", G_CALLBACK (thunar_window_notebook_popup_menu), window); | |
+ g_signal_connect (G_OBJECT (window->notebook2), "create-window", G_CALLBACK (thunar_window_notebook_create_window), window); | |
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (window->notebook2), FALSE); | |
+ gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK (window->notebook2), TRUE); | |
+ gtk_notebook_set_scrollable (GTK_NOTEBOOK (window->notebook2), TRUE); | |
+ gtk_container_set_border_width (GTK_CONTAINER (window->notebook2), 0); | |
+ gtk_notebook_set_group_name (GTK_NOTEBOOK (window->notebook2), "thunar-tabs"); | |
+ gtk_widget_show (window->notebook2); | |
+ | |
+ /* drop the notebook borders */ | |
+ style = gtk_rc_style_new (); | |
+ style->xthickness = style->ythickness = 0; | |
+ gtk_widget_modify_style (window->notebook2, style); | |
+ g_object_unref (G_OBJECT (style)); | |
+ | |
+ /* set notebook2 to selected notebook */ | |
+ window->notebook = window->notebook2; | |
+ directory = thunar_window_get_current_directory (window); | |
+ thunar_window_notebook_insert (window, directory); | |
+ } | |
+ | |
+ return TRUE; | |
+} | |
+ | |
+ | |
+ | |
+static gboolean | |
+thunar_window_notebook_select (GtkWidget *view, | |
+ GdkEvent *event, | |
+ ThunarWindow *window) | |
+{ | |
+ GtkWidget *selected_notebook; | |
+ gint current_page_n; | |
+ GtkWidget *current_page; | |
+ | |
+ /* if there is not two panes (notebook2 == NULL) nothing to do */ | |
+ if (window->notebook2 == NULL) | |
+ return FALSE; | |
+ | |
+ /* notebook selected */ | |
+ selected_notebook = gtk_widget_get_ancestor (view, GTK_TYPE_NOTEBOOK); | |
+ | |
+ /* if the notebook selected is the same than the current notebook selected nothing to do */ | |
+ if (selected_notebook == window->notebook) | |
+ return FALSE; | |
+ | |
+ /* select and activate selected notebook */ | |
+ window->notebook = selected_notebook; | |
+ current_page_n = gtk_notebook_get_current_page (GTK_NOTEBOOK (window->notebook)); | |
+ current_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (window->notebook), current_page_n); | |
+ thunar_component_set_ui_manager (THUNAR_COMPONENT (window->view), NULL); | |
+ window->view = NULL; | |
+ thunar_window_notebook_switch_page (window->notebook, current_page, current_page_n, window); | |
+ | |
+ return FALSE; | |
+} | |
+ | |
+ | |
+ | |
static void | |
thunar_window_notebook_switch_page (GtkWidget *notebook, | |
GtkWidget *page, | |
@@ -1405,7 +1570,8 @@ thunar_window_notebook_switch_page (GtkW | |
_thunar_return_if_fail (THUNAR_IS_WINDOW (window)); | |
_thunar_return_if_fail (GTK_IS_NOTEBOOK (notebook)); | |
_thunar_return_if_fail (THUNAR_IS_VIEW (page)); | |
- _thunar_return_if_fail (window->notebook == notebook); | |
+ _thunar_return_if_fail (window->notebook1 == notebook || | |
+ window->notebook2 == notebook); | |
/* leave if nothing changed */ | |
if (window->view == page) | |
@@ -1553,7 +1719,7 @@ thunar_window_notebook_page_removed (Gtk | |
thunar_component_set_ui_manager (THUNAR_COMPONENT (page), NULL); | |
n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)); | |
- if (n_pages == 0) | |
+ if (n_pages == 0 && window->notebook2 == NULL) | |
{ | |
/* destroy the window */ | |
gtk_widget_destroy (GTK_WIDGET (window)); | |
@@ -1784,6 +1950,11 @@ thunar_window_notebook_insert (ThunarWin | |
gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (window->notebook), view, TRUE); | |
gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (window->notebook), view, TRUE); | |
+ /* connect signal view */ | |
+ gtk_widget_add_events (GTK_WIDGET (view), GDK_BUTTON_PRESS_MASK); | |
+ g_signal_connect (G_OBJECT (GTK_BIN (view)->child), "button-press-event", G_CALLBACK (thunar_window_notebook_select), window); | |
+ g_signal_connect (G_OBJECT (GTK_BIN (view)->child), "button-release-event", G_CALLBACK (thunar_window_notebook_select), window); | |
+ | |
/* take focus on the view */ | |
gtk_widget_grab_focus (view); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment