diff options
| author | mbkma <[email protected]> | 2026-02-01 08:12:15 +0100 |
|---|---|---|
| committer | mbkma <[email protected]> | 2026-02-02 00:11:25 +0100 |
| commit | f03c3fa5d195bd26232a5a4a1a1d761b2187a6b7 (patch) | |
| tree | 5fce2241d3424d66874c69fa57d86c844d5008a6 /src/terminal-window.c | |
| parent | 72e82009ab236c2edb16827905b0aeb5bfc61a11 (diff) | |
| download | mate-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.c | 86 |
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, |
