[Xfce4-commits] [xfce/thunar] 01/01: Add preference to open new thunar instances as tabs, if there is an existing thunar window (Bug #13314)

noreply at xfce.org noreply at xfce.org
Mon Aug 20 13:44:18 CEST 2018


This is an automated email from the git hooks/post-receive script.

a   l   e   x       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       x   f   c   e   -   4   .   1   4   
   in repository xfce/thunar.

commit 8dd1c609ff730e2a141c5ebd66fe42b9f72eb19f
Author: Alexander Schwinn <alexxcons at xfce.org>
Date:   Tue Aug 14 23:03:08 2018 +0200

    Add preference to open new thunar instances as tabs, if there is an existing thunar window
    (Bug #13314)
---
 thunar/thunar-application.c        | 39 ++++++++++++++++++++++++++++++--------
 thunar/thunar-application.h        |  3 ++-
 thunar/thunar-dbus-service.c       |  6 +++---
 thunar/thunar-file.c               |  2 +-
 thunar/thunar-launcher.c           |  2 +-
 thunar/thunar-location-button.c    |  2 +-
 thunar/thunar-location-buttons.c   |  2 +-
 thunar/thunar-preferences-dialog.c | 29 +++++++++++++++-------------
 thunar/thunar-preferences.c        | 14 ++++++++++++++
 thunar/thunar-shortcuts-view.c     |  2 +-
 thunar/thunar-tree-view.c          |  2 +-
 thunar/thunar-window.c             |  8 +++-----
 thunar/thunar-window.h             |  2 ++
 13 files changed, 77 insertions(+), 36 deletions(-)

diff --git a/thunar/thunar-application.c b/thunar/thunar-application.c
index d26364c..604d8a4 100644
--- a/thunar/thunar-application.c
+++ b/thunar/thunar-application.c
@@ -1235,14 +1235,15 @@ thunar_application_take_window (ThunarApplication *application,
 
 /**
  * thunar_application_open_window:
- * @application    : a #ThunarApplication.
- * @directory      : the directory to open.
- * @screen         : the #GdkScreen on which to open the window or %NULL
- *                   to open on the default screen.
- * @startup_id     : startup id from startup notification passed along
- *                   with dbus to make focus stealing work properly.
+ * @application      : a #ThunarApplication.
+ * @directory        : the directory to open.
+ * @screen           : the #GdkScreen on which to open the window or %NULL
+ *                     to open on the default screen.
+ * @startup_id       : startup id from startup notification passed along
+ *                     with dbus to make focus stealing work properly.
+ * @force_new_window : set this flag to force a new window, even if misc-open-new-window-as-tab is set
  *
- * Opens a new #ThunarWindow for @application, displaying the
+ * Opens a new #ThunarWindow (or tab if preferred) for @application, displaying the
  * given @directory.
  *
  * Return value: the newly allocated #ThunarWindow.
@@ -1251,10 +1252,13 @@ GtkWidget*
 thunar_application_open_window (ThunarApplication *application,
                                 ThunarFile        *directory,
                                 GdkScreen         *screen,
-                                const gchar       *startup_id)
+                                const gchar       *startup_id,
+                                gboolean           force_new_window)
 {
+  GList*     list;
   GtkWidget *window;
   gchar     *role;
+  gboolean   open_new_window_as_tab;
 
   _thunar_return_val_if_fail (THUNAR_IS_APPLICATION (application), NULL);
   _thunar_return_val_if_fail (directory == NULL || THUNAR_IS_FILE (directory), NULL);
@@ -1263,6 +1267,25 @@ thunar_application_open_window (ThunarApplication *application,
   if (G_UNLIKELY (screen == NULL))
     screen = gdk_screen_get_default ();
 
+  /* open as tab instead, if preferred */
+  g_object_get (G_OBJECT (application->preferences), "misc-open-new-window-as-tab", &open_new_window_as_tab, NULL);
+  if (G_UNLIKELY (!force_new_window && open_new_window_as_tab))
+    {
+      list = thunar_application_get_windows (application);
+      if (list != NULL)  
+        {
+          /* this will be the topmost Window */
+          list = g_list_last (list);
+
+          if (directory != NULL)
+              thunar_window_notebook_insert (THUNAR_WINDOW (list->data), directory);
+          
+          /* bring the window to front */
+          gtk_window_present (list->data);
+          return list->data;
+        }
+    }
+
   /* generate a unique role for the new window (for session management) */
   role = g_strdup_printf ("Thunar-%u-%u", (guint) time (NULL), (guint) g_random_int ());
 
diff --git a/thunar/thunar-application.h b/thunar/thunar-application.h
index 6e4d673..e5b23de 100644
--- a/thunar/thunar-application.h
+++ b/thunar/thunar-application.h
@@ -58,7 +58,8 @@ void                  thunar_application_take_window                (ThunarAppli
 GtkWidget            *thunar_application_open_window                (ThunarApplication *application,
                                                                      ThunarFile        *directory,
                                                                      GdkScreen         *screen,
-                                                                     const gchar       *startup_id);
+                                                                     const gchar       *startup_id,
+                                                                     gboolean           force_new_window);
 
 gboolean              thunar_application_bulk_rename                (ThunarApplication *application,
                                                                      const gchar       *working_directory,
diff --git a/thunar/thunar-dbus-service.c b/thunar/thunar-dbus-service.c
index 258acb9..66c104b 100644
--- a/thunar/thunar-dbus-service.c
+++ b/thunar/thunar-dbus-service.c
@@ -462,7 +462,7 @@ thunar_dbus_service_display_folder (ThunarDBusFileManager  *object,
 
   /* popup a new window for the folder */
   application = thunar_application_get ();
-  thunar_application_open_window (application, file, screen, startup_id);
+  thunar_application_open_window (application, file, screen, startup_id, FALSE);
   g_object_unref (G_OBJECT (application));
 
   /* cleanup */
@@ -509,7 +509,7 @@ thunar_dbus_service_display_folder_and_select (ThunarDBusFileManager  *object,
 
   /* popup a new window for the folder */
   application = thunar_application_get ();
-  window = thunar_application_open_window (application, folder, screen, startup_id);
+  window = thunar_application_open_window (application, folder, screen, startup_id, FALSE);
   g_object_unref (application);
 
   /* determine the path for the filename relative to the folder */
@@ -745,7 +745,7 @@ thunar_dbus_service_display_trash (ThunarDBusTrash        *object,
     {
       /* tell the application to display the trash bin */
       application = thunar_application_get ();
-      thunar_application_open_window (application, dbus_service->trash_bin, screen, startup_id);
+      thunar_application_open_window (application, dbus_service->trash_bin, screen, startup_id, FALSE);
       g_object_unref (G_OBJECT (application));
 
       /* release the screen */
diff --git a/thunar/thunar-file.c b/thunar/thunar-file.c
index 6758a76..5194b66 100644
--- a/thunar/thunar-file.c
+++ b/thunar/thunar-file.c
@@ -1798,7 +1798,7 @@ thunar_file_launch (ThunarFile  *file,
   if (thunar_file_is_directory (file))
     {
       application = thunar_application_get ();
-      thunar_application_open_window (application, file, screen, startup_id);
+      thunar_application_open_window (application, file, screen, startup_id, FALSE);
       g_object_unref (G_OBJECT (application));
       return TRUE;
     }
diff --git a/thunar/thunar-launcher.c b/thunar/thunar-launcher.c
index 6f9d430..b34b491 100644
--- a/thunar/thunar-launcher.c
+++ b/thunar/thunar-launcher.c
@@ -741,7 +741,7 @@ thunar_launcher_open_windows (ThunarLauncher *launcher,
 
       /* open all requested windows */
       for (lp = directories; lp != NULL; lp = lp->next)
-        thunar_application_open_window (application, lp->data, screen, NULL);
+        thunar_application_open_window (application, lp->data, screen, NULL, TRUE);
 
       /* release the application object */
       g_object_unref (G_OBJECT (application));
diff --git a/thunar/thunar-location-button.c b/thunar/thunar-location-button.c
index be16161..30ea56e 100644
--- a/thunar/thunar-location-button.c
+++ b/thunar/thunar-location-button.c
@@ -565,7 +565,7 @@ thunar_location_button_button_release_event (GtkWidget            *button,
             {
               /* open a new window for the folder */
               application = thunar_application_get ();
-              thunar_application_open_window (application, THUNAR_LOCATION_BUTTON (button)->file, gtk_widget_get_screen (button), NULL);
+              thunar_application_open_window (application, THUNAR_LOCATION_BUTTON (button)->file, gtk_widget_get_screen (button), NULL, TRUE);
               g_object_unref (G_OBJECT (application));
             }
         }
diff --git a/thunar/thunar-location-buttons.c b/thunar/thunar-location-buttons.c
index a13bcbe..872e456 100644
--- a/thunar/thunar-location-buttons.c
+++ b/thunar/thunar-location-buttons.c
@@ -1476,7 +1476,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
     {
       /* open a new window for the directory */
       application = thunar_application_get ();
-      thunar_application_open_window (application, directory, gtk_widget_get_screen (GTK_WIDGET (buttons)), NULL);
+      thunar_application_open_window (application, directory, gtk_widget_get_screen (GTK_WIDGET (buttons)), NULL, TRUE);
       g_object_unref (G_OBJECT (application));
     }
 }
diff --git a/thunar/thunar-preferences-dialog.c b/thunar/thunar-preferences-dialog.c
index cc7d928..488f7c0 100644
--- a/thunar/thunar-preferences-dialog.c
+++ b/thunar/thunar-preferences-dialog.c
@@ -616,27 +616,30 @@ thunar_preferences_dialog_init (ThunarPreferencesDialog *dialog)
   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
   gtk_widget_show (frame);
 
-  label = gtk_label_new (_("Middle Click"));
+  label = gtk_label_new (_("Tabs instead of new Windows"));
   gtk_label_set_attributes (GTK_LABEL (label), thunar_pango_attr_list_bold ());
   gtk_frame_set_label_widget (GTK_FRAME (frame), label);
   gtk_widget_show (label);
 
-  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
-  gtk_container_add (GTK_CONTAINER (frame), vbox);
-  gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
-  gtk_widget_show (vbox);
-
-  button = gtk_radio_button_new_with_mnemonic_from_widget (NULL, _("Open folder in new _window"));
-  g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (g_object_notify), "active");
-  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
-  gtk_widget_show (button);
+  grid = gtk_grid_new ();
+  gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+  gtk_grid_set_row_spacing (GTK_GRID (grid), 2);
+  gtk_container_set_border_width (GTK_CONTAINER (grid), 12);
+  gtk_container_add (GTK_CONTAINER (frame), grid);
+  gtk_widget_show (grid);
 
-  button = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (button), _("Open folder in new _tab"));
+  button = gtk_check_button_new_with_mnemonic (_("Open folders in new tabs on middle click"));
   exo_mutual_binding_new (G_OBJECT (dialog->preferences), "misc-middle-click-in-tab", G_OBJECT (button), "active");
-  g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (g_object_notify), "active");
-  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
+  gtk_widget_set_tooltip_text (button, _("Select this option to open a new tab on middle click instead of a new window"));
+  gtk_grid_attach (GTK_GRID (grid), button, 0, 0, 1, 1);
   gtk_widget_show (button);
 
+  button = gtk_check_button_new_with_mnemonic (_("Open new thunar instances as tabs"));
+  exo_mutual_binding_new (G_OBJECT (dialog->preferences), "misc-open-new-window-as-tab", G_OBJECT (button), "active");
+  gtk_widget_set_tooltip_text (button, _("Select this option to open new thunar instances as tabs in an existing thunar window"));
+  gtk_widget_set_hexpand (button, TRUE);
+  gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 1, 1);
+  gtk_widget_show (button);
   /*
      Advanced
    */
diff --git a/thunar/thunar-preferences.c b/thunar/thunar-preferences.c
index f2bcb74..d61b695 100644
--- a/thunar/thunar-preferences.c
+++ b/thunar/thunar-preferences.c
@@ -82,6 +82,7 @@ enum
   PROP_MISC_HORIZONTAL_WHEEL_NAVIGATES,
   PROP_MISC_IMAGE_SIZE_IN_STATUSBAR,
   PROP_MISC_MIDDLE_CLICK_IN_TAB,
+  PROP_MISC_OPEN_NEW_WINDOW_AS_TAB,
   PROP_MISC_RECURSIVE_PERMISSIONS,
   PROP_MISC_REMEMBER_GEOMETRY,
   PROP_MISC_SHOW_ABOUT_TEMPLATES,
@@ -586,6 +587,19 @@ thunar_preferences_class_init (ThunarPreferencesClass *klass)
                             EXO_PARAM_READWRITE);
 
   /**
+   * ThunarPreferences:misc-open-new-window-as_tab:
+   *
+   * %TRUE to open a new tab in an existing thunar instance. instead of a new window
+   * if a thunar windows already is present
+   **/
+  preferences_props[PROP_MISC_OPEN_NEW_WINDOW_AS_TAB] =
+      g_param_spec_boolean ("misc-open-new-window-as-tab",
+                            "MiscOpenNewWindowAsTab",
+                            NULL,
+                            FALSE,
+                            EXO_PARAM_READWRITE);
+
+  /**
    * ThunarPreferences:misc-recursive-permissions:
    *
    * Whether to apply permissions recursively every time the
diff --git a/thunar/thunar-shortcuts-view.c b/thunar/thunar-shortcuts-view.c
index a2e154e..e71c3b6 100644
--- a/thunar/thunar-shortcuts-view.c
+++ b/thunar/thunar-shortcuts-view.c
@@ -1661,7 +1661,7 @@ thunar_shortcuts_view_poke_file_finish (ThunarBrowser *browser,
           /* open a new window for the target folder */
           application = thunar_application_get ();
           thunar_application_open_window (application, target_file,
-                                          gtk_widget_get_screen (GTK_WIDGET (browser)), NULL);
+                                          gtk_widget_get_screen (GTK_WIDGET (browser)), NULL, TRUE);
           g_object_unref (application);
         }
       else if (open_in == OPEN_IN_TAB)
diff --git a/thunar/thunar-tree-view.c b/thunar/thunar-tree-view.c
index 4c238ca..0d2d2ce 100644
--- a/thunar/thunar-tree-view.c
+++ b/thunar/thunar-tree-view.c
@@ -2355,7 +2355,7 @@ thunar_tree_view_open_selection_in_new_window (ThunarTreeView *view)
       /* open a new window for the selected folder */
       application = thunar_application_get ();
       thunar_application_open_window (application, file,
-                                      gtk_widget_get_screen (GTK_WIDGET (view)), NULL);
+                                      gtk_widget_get_screen (GTK_WIDGET (view)), NULL, TRUE);
       g_object_unref (application);
       g_object_unref (file);
     }
diff --git a/thunar/thunar-window.c b/thunar/thunar-window.c
index a5e718d..016d383 100644
--- a/thunar/thunar-window.c
+++ b/thunar/thunar-window.c
@@ -140,8 +140,6 @@ static gpointer thunar_window_notebook_create_window      (GtkWidget
                                                            gint                    x,
                                                            gint                    y,
                                                            ThunarWindow           *window);
-static void     thunar_window_notebook_insert             (ThunarWindow           *window,
-                                                           ThunarFile             *directory);
 static void     thunar_window_merge_custom_preferences    (ThunarWindow           *window);
 static gboolean thunar_window_bookmark_merge              (gpointer                user_data);
 static void     thunar_window_merge_go_actions            (ThunarWindow           *window);
@@ -1743,7 +1741,7 @@ thunar_window_notebook_create_window (GtkWidget    *notebook,
   /* create new window */
   application = thunar_application_get ();
   screen = gtk_window_get_screen (GTK_WINDOW (window));
-  new_window = thunar_application_open_window (application, NULL, screen, NULL);
+  new_window = thunar_application_open_window (application, NULL, screen, NULL, TRUE);
   g_object_unref (application);
 
   /* make sure the new window has the same size */
@@ -1771,7 +1769,7 @@ thunar_window_notebook_create_window (GtkWidget    *notebook,
 
 
 
-static void
+void
 thunar_window_notebook_insert (ThunarWindow *window,
                                ThunarFile   *directory)
 {
@@ -2357,7 +2355,7 @@ thunar_window_action_open_new_window (GtkAction    *action,
   /* popup a new window */
   application = thunar_application_get ();
   new_window = THUNAR_WINDOW (thunar_application_open_window (application, window->current_directory,
-                                                              gtk_widget_get_screen (GTK_WIDGET (window)), NULL));
+                                                              gtk_widget_get_screen (GTK_WIDGET (window)), NULL, TRUE));
   g_object_unref (G_OBJECT (application));
 
   /* if we have no origin view we are done */
diff --git a/thunar/thunar-window.h b/thunar/thunar-window.h
index 8906fcb..015525d 100644
--- a/thunar/thunar-window.h
+++ b/thunar/thunar-window.h
@@ -56,6 +56,8 @@ gboolean        thunar_window_set_directories       (ThunarWindow   *window,
 void            thunar_window_update_directories    (ThunarWindow *window,
                                                      ThunarFile   *old_directory,
                                                      ThunarFile   *new_directory);
+void            thunar_window_notebook_insert       (ThunarWindow *window,
+                                                     ThunarFile   *directory);
 
 G_END_DECLS;
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list