[Xfce4-commits] [apps/xfce4-terminal] 01/01: Convert "Relaunch" dialog to GtkInfoBar

noreply at xfce.org noreply at xfce.org
Sun Apr 1 16:28:21 CEST 2018


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

f   2   4   0   4       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-terminal.

commit c772f06567e224539bd57d3bdf5320a4964e520a
Author: Igor <f2404 at yandex.ru>
Date:   Sun Apr 1 10:27:49 2018 -0400

    Convert "Relaunch" dialog to GtkInfoBar
    
    This makes it less intrusive.
---
 terminal/terminal-screen.c | 85 ++++++++++++++++++++++++++++------------------
 terminal/terminal-screen.h |  1 -
 2 files changed, 52 insertions(+), 34 deletions(-)

diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c
index 7d13958..492f2bb 100644
--- a/terminal/terminal-screen.c
+++ b/terminal/terminal-screen.c
@@ -162,14 +162,15 @@ static void       terminal_screen_set_custom_command            (TerminalScreen
 
 struct _TerminalScreenClass
 {
-  GtkHBoxClass parent_class;
+  GtkOverlayClass parent_class;
 };
 
 struct _TerminalScreen
 {
-  GtkHBox              parent_instance;
+  GtkOverlay           parent_instance;
   TerminalPreferences *preferences;
   TerminalImageLoader *loader;
+  GtkWidget           *hbox;
   GtkWidget           *terminal;
   GtkWidget           *scrollbar;
   GtkWidget           *tab_label;
@@ -202,7 +203,7 @@ static guint screen_last_session_id = 0;
 
 
 
-G_DEFINE_TYPE (TerminalScreen, terminal_screen, GTK_TYPE_BOX)
+G_DEFINE_TYPE (TerminalScreen, terminal_screen, GTK_TYPE_OVERLAY)
 
 
 
@@ -288,6 +289,9 @@ terminal_screen_init (TerminalScreen *screen)
   screen->session_id = ++screen_last_session_id;
   screen->pid = -1;
 
+  screen->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  gtk_container_add (GTK_CONTAINER (screen), screen->hbox);
+
   screen->terminal = g_object_new (TERMINAL_TYPE_WIDGET, NULL);
   g_signal_connect (G_OBJECT (screen->terminal), "child-exited",
       G_CALLBACK (terminal_screen_vte_child_exited), screen);
@@ -303,11 +307,11 @@ terminal_screen_init (TerminalScreen *screen)
       G_CALLBACK (terminal_screen_vte_resize_window), screen);
   g_signal_connect (G_OBJECT (screen->terminal), "draw",
       G_CALLBACK (terminal_screen_draw), screen);
-  gtk_box_pack_start (GTK_BOX (screen), screen->terminal, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (screen->hbox), screen->terminal, TRUE, TRUE, 0);
 
   screen->scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL,
                                          gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (screen->terminal)));
-  gtk_box_pack_start (GTK_BOX (screen), screen->scrollbar, FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (screen->hbox), screen->scrollbar, FALSE, FALSE, 0);
   g_signal_connect_after (G_OBJECT (screen->scrollbar), "button-press-event", G_CALLBACK (gtk_true), NULL);
 
   /* watch preferences changes */
@@ -342,7 +346,7 @@ terminal_screen_init (TerminalScreen *screen)
       G_CALLBACK (terminal_screen_vte_window_contents_resized), screen);
 
   /* show the terminal */
-  gtk_widget_show_all (screen->terminal);
+  gtk_widget_show_all (screen->hbox);
 }
 
 
@@ -1299,14 +1303,37 @@ terminal_screen_update_word_chars (TerminalScreen *screen)
 
 
 static void
+relaunch_bar_response (GtkInfoBar     *info_bar,
+                       gint            response_id,
+                       TerminalScreen *screen)
+{
+  /* relaunch the process or remember to not show it anymore */
+  if (response_id == GTK_RESPONSE_YES)
+    {
+      terminal_screen_launch_child (screen);
+      terminal_screen_focus (screen);
+    }
+  else
+    {
+      GtkWidget       *content_area = gtk_info_bar_get_content_area (info_bar);
+      GList           *children = gtk_container_get_children (GTK_CONTAINER (content_area));
+      GtkToggleButton *checkbox = g_list_nth_data (children, 1);
+
+      if (G_LIKELY (checkbox != NULL) && GTK_IS_TOGGLE_BUTTON (checkbox) && gtk_toggle_button_get_active (checkbox))
+        g_object_set (G_OBJECT (screen->preferences), "misc-show-relaunch-dialog", FALSE, NULL);
+    }
+
+  gtk_widget_destroy (GTK_WIDGET (info_bar));
+}
+
+
+
+static void
 terminal_screen_vte_child_exited (VteTerminal    *terminal,
                                   gint            status,
                                   TerminalScreen *screen)
 {
-  GtkWidget *window, *dialog, *content_area, *label, *checkbox;
-  gchar     *message;
-  gint       response;
-  gboolean   show_relaunch_dialog;
+  gboolean show_relaunch_dialog;
 
   terminal_return_if_fail (VTE_IS_TERMINAL (terminal));
   terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
@@ -1317,18 +1344,14 @@ terminal_screen_vte_child_exited (VteTerminal    *terminal,
     gtk_widget_destroy (GTK_WIDGET (screen));
   else if (show_relaunch_dialog)
     {
-      /* create "Relaunch" dialog */
-      window = gtk_widget_get_toplevel (GTK_WIDGET (screen));
-      dialog = gtk_dialog_new_with_buttons (_("Child process exited"),
-                                            GTK_WINDOW (window),
-                                            GTK_DIALOG_DESTROY_WITH_PARENT,
-                                            _("_Relaunch"),
-                                            GTK_RESPONSE_YES,
-                                            NULL);
-      gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
-
-      content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
-      gtk_box_set_spacing (GTK_BOX (content_area), 6);
+      /* create "Relaunch" bar */
+      GtkWidget *relaunch_bar, *content_area, *label, *checkbox;
+      gchar *message;
+
+      relaunch_bar = gtk_info_bar_new_with_buttons (_("_Relaunch"), GTK_RESPONSE_YES, NULL);
+      gtk_info_bar_set_message_type (GTK_INFO_BAR (relaunch_bar), GTK_MESSAGE_INFO);
+      gtk_info_bar_set_show_close_button (GTK_INFO_BAR (relaunch_bar), TRUE);
+      content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (relaunch_bar));
 
       if (WIFEXITED (status))
         message = g_strdup_printf (_("The child process exited normally with status %d."), WEXITSTATUS (status));
@@ -1344,16 +1367,12 @@ terminal_screen_vte_child_exited (VteTerminal    *terminal,
       checkbox = gtk_check_button_new_with_mnemonic (_("Do _not ask me again"));
       gtk_container_add (GTK_CONTAINER (content_area), checkbox);
 
-      gtk_widget_show_all (dialog);
-      response = gtk_dialog_run (GTK_DIALOG (dialog));
-
-      /* relaunch the process or remember to not show it anymore */
-      if (response == GTK_RESPONSE_YES)
-        terminal_screen_launch_child (screen);
-      else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox)))
-        g_object_set (G_OBJECT (screen->preferences), "misc-show-relaunch-dialog", FALSE, NULL);
+      g_signal_connect (G_OBJECT (relaunch_bar), "response", G_CALLBACK (relaunch_bar_response), screen);
 
-      gtk_widget_destroy (dialog);
+      gtk_widget_set_halign (relaunch_bar, GTK_ALIGN_FILL);
+      gtk_widget_set_valign (relaunch_bar, GTK_ALIGN_START);
+      gtk_overlay_add_overlay (GTK_OVERLAY (screen), relaunch_bar);
+      gtk_widget_show_all (relaunch_bar);
     }
 }
 
@@ -2567,12 +2586,12 @@ terminal_screen_update_scrolling_bar (TerminalScreen *screen)
           break;
 
         case TERMINAL_SCROLLBAR_LEFT:
-          gtk_box_reorder_child (GTK_BOX (screen), screen->scrollbar, 0);
+          gtk_box_reorder_child (GTK_BOX (screen->hbox), screen->scrollbar, 0);
           gtk_widget_show (screen->scrollbar);
           break;
 
         default: /* TERMINAL_SCROLLBAR_RIGHT */
-          gtk_box_reorder_child (GTK_BOX (screen), screen->scrollbar, 1);
+          gtk_box_reorder_child (GTK_BOX (screen->hbox), screen->scrollbar, 1);
           gtk_widget_show (screen->scrollbar);
           break;
         }
diff --git a/terminal/terminal-screen.h b/terminal/terminal-screen.h
index ab273cf..00d3f5c 100644
--- a/terminal/terminal-screen.h
+++ b/terminal/terminal-screen.h
@@ -127,7 +127,6 @@ void            terminal_screen_save_contents             (TerminalScreen *scree
 
 gboolean        terminal_screen_has_foreground_process    (TerminalScreen *screen);
 
-
 G_END_DECLS
 
 #endif /* !TERMINAL_SCREEN_H */

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


More information about the Xfce4-commits mailing list