summaryrefslogtreecommitdiff
path: root/src/terminal-window.c
diff options
context:
space:
mode:
authormbkma <[email protected]>2026-02-01 08:12:15 +0100
committermbkma <[email protected]>2026-02-02 00:11:25 +0100
commitf03c3fa5d195bd26232a5a4a1a1d761b2187a6b7 (patch)
tree5fce2241d3424d66874c69fa57d86c844d5008a6 /src/terminal-window.c
parent72e82009ab236c2edb16827905b0aeb5bfc61a11 (diff)
downloadmate-terminal-application.tar.bz2
mate-terminal-application.tar.xz
port to GtkApplicationapplication
Diffstat (limited to 'src/terminal-window.c')
-rw-r--r--src/terminal-window.c86
1 files changed, 66 insertions, 20 deletions
diff --git a/src/terminal-window.c b/src/terminal-window.c
index 75e5fd8..12fe9de 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -30,6 +30,7 @@
#include <gdk/gdkkeysyms.h>
#include "terminal-accels.h"
+#include "terminal-actions.h"
#include "terminal-app.h"
#include "terminal-debug.h"
#include "terminal-encoding.h"
@@ -45,8 +46,6 @@
#include "skey-popup.h"
#endif
-static gboolean detach_tab = FALSE;
-
struct _TerminalWindowPrivate
{
GtkActionGroup *action_group;
@@ -162,10 +161,10 @@ static gboolean terminal_window_focus_in_event (GtkWidget *widget,
static gboolean notebook_button_press_cb (GtkWidget *notebook,
GdkEventButton *event,
- GSettings *settings);
+ gpointer user_data);
static gboolean window_key_press_cb (GtkWidget *notebook,
GdkEventKey *event,
- GSettings *settings);
+ gpointer user_data);
static gboolean notebook_popup_menu_cb (GtkWidget *notebook,
TerminalWindow *window);
static void notebook_page_selected_callback (GtkWidget *notebook,
@@ -269,7 +268,7 @@ sync_screen_icon_title (TerminalScreen *screen,
GParamSpec *psepc,
TerminalWindow *window);
-G_DEFINE_TYPE_WITH_PRIVATE (TerminalWindow, terminal_window, GTK_TYPE_WINDOW)
+G_DEFINE_TYPE_WITH_PRIVATE (TerminalWindow, terminal_window, GTK_TYPE_APPLICATION_WINDOW)
/* Menubar mnemonics & accel settings handling */
@@ -2260,6 +2259,9 @@ terminal_window_init (TerminalWindow *window)
priv = window->priv = terminal_window_get_instance_private (window);
+ /* Initialize GAction for this window */
+ terminal_actions_init_window (GTK_APPLICATION_WINDOW (window));
+
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK(terminal_window_delete_event),
NULL);
@@ -2294,9 +2296,9 @@ terminal_window_init (TerminalWindow *window)
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
gtk_notebook_set_group_name (GTK_NOTEBOOK (priv->notebook), I_("mate-terminal-window"));
g_signal_connect (priv->notebook, "button-press-event",
- G_CALLBACK (notebook_button_press_cb), settings_global);
+ G_CALLBACK (notebook_button_press_cb), NULL);
g_signal_connect (window, "key-press-event",
- G_CALLBACK (window_key_press_cb), settings_global);
+ G_CALLBACK (window_key_press_cb), NULL);
g_signal_connect (priv->notebook, "popup-menu",
G_CALLBACK (notebook_popup_menu_cb), window);
g_signal_connect_after (priv->notebook, "switch-page",
@@ -2727,9 +2729,10 @@ terminal_window_add_screen (TerminalWindow *window,
TRUE);
}
-void
-terminal_window_remove_screen (TerminalWindow *window,
- TerminalScreen *screen)
+static void
+remove_screen_internal (TerminalWindow *window,
+ TerminalScreen *screen,
+ gboolean detach)
{
TerminalWindowPrivate *priv = window->priv;
TerminalScreenContainer *screen_container;
@@ -2739,18 +2742,22 @@ terminal_window_remove_screen (TerminalWindow *window,
update_tab_visibility (window, -1);
screen_container = terminal_screen_container_get_from_screen (screen);
- if (detach_tab)
- {
+ if (detach)
gtk_notebook_detach_tab (GTK_NOTEBOOK (priv->notebook),
GTK_WIDGET (screen_container));
- detach_tab = FALSE;
- }
else
gtk_container_remove (GTK_CONTAINER (priv->notebook),
GTK_WIDGET (screen_container));
}
void
+terminal_window_remove_screen (TerminalWindow *window,
+ TerminalScreen *screen)
+{
+ remove_screen_internal (window, screen, FALSE);
+}
+
+void
terminal_window_move_screen (TerminalWindow *source_window,
TerminalWindow *dest_window,
TerminalScreen *screen,
@@ -2775,9 +2782,7 @@ terminal_window_move_screen (TerminalWindow *source_window,
g_object_ref_sink (screen_container);
g_object_ref_sink (screen);
- detach_tab = TRUE;
-
- terminal_window_remove_screen (source_window, screen);
+ remove_screen_internal (source_window, screen, TRUE);
/* Now we can safely remove the screen from the container and let the container die */
gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET (screen))), GTK_WIDGET (screen));
@@ -3034,11 +3039,12 @@ terminal_window_get_active (TerminalWindow *window)
static gboolean
notebook_button_press_cb (GtkWidget *widget,
GdkEventButton *event,
- GSettings *settings)
+ gpointer user_data)
{
TerminalWindow *window = TERMINAL_WINDOW (gtk_widget_get_toplevel (widget));
TerminalWindowPrivate *priv = window->priv;
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+ GSettings *settings = terminal_app_get_global_settings (terminal_app_get ());
GtkWidget *tab;
GtkWidget *menu;
GtkAction *action;
@@ -3122,8 +3128,9 @@ notebook_button_press_cb (GtkWidget *widget,
static gboolean
window_key_press_cb (GtkWidget *widget,
GdkEventKey *event,
- GSettings *settings)
+ gpointer user_data)
{
+ GSettings *settings = terminal_app_get_global_settings (terminal_app_get ());
if (g_settings_get_boolean (settings, "ctrl-tab-switch-tabs") &&
event->state & GDK_CONTROL_MASK)
{
@@ -3732,7 +3739,7 @@ confirm_close_window_or_tab (TerminalWindow *window,
int n_tabs;
char *confirm_msg;
- if (!g_settings_get_boolean (settings_global, "confirm-window-close"))
+ if (!g_settings_get_boolean (terminal_app_get_global_settings (terminal_app_get ()), "confirm-window-close"))
return FALSE;
if (screen)
@@ -4622,6 +4629,45 @@ terminal_window_get_ui_manager (TerminalWindow *window)
return priv->ui_manager;
}
+/* Public wrapper functions for GAction callbacks */
+
+void
+terminal_window_show_find_dialog (TerminalWindow *window)
+{
+ g_return_if_fail (TERMINAL_IS_WINDOW (window));
+ search_find_callback (NULL, window);
+}
+
+void
+terminal_window_show_set_title_dialog (TerminalWindow *window)
+{
+ g_return_if_fail (TERMINAL_IS_WINDOW (window));
+ terminal_set_title_callback (NULL, window);
+}
+
+void
+terminal_window_detach_screen (TerminalWindow *window, TerminalScreen *screen)
+{
+ g_return_if_fail (TERMINAL_IS_WINDOW (window));
+ g_return_if_fail (TERMINAL_IS_SCREEN (screen));
+ tabs_detach_tab_callback (NULL, window);
+}
+
+void
+terminal_window_show_about_dialog (GtkWindow *parent)
+{
+ if (parent && TERMINAL_IS_WINDOW (parent))
+ help_about_callback (NULL, TERMINAL_WINDOW (parent));
+ else
+ {
+ /* Create a temporary window for the about dialog */
+ GtkApplication *app = GTK_APPLICATION (g_application_get_default ());
+ GList *windows = gtk_application_get_windows (app);
+ if (windows)
+ help_about_callback (NULL, TERMINAL_WINDOW (windows->data));
+ }
+}
+
void
terminal_window_save_state (TerminalWindow *window,
GKeyFile *key_file,