antiright-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Antiright-devel] antiright/gtkshell add_options.c terminal.c ter...


From: Jeffrey Bedard
Subject: [Antiright-devel] antiright/gtkshell add_options.c terminal.c ter...
Date: Sat, 24 Nov 2007 10:53:42 +0000

CVSROOT:        /sources/antiright
Module name:    antiright
Changes by:     Jeffrey Bedard <jefbed> 07/11/24 10:53:42

Modified files:
        gtkshell       : add_options.c terminal.c terminal.h 
                         terminal_options.c terminal_struct.h 

Log message:
        Add tabbed terminal widgets.  

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/add_options.c?cvsroot=antiright&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal.c?cvsroot=antiright&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal.h?cvsroot=antiright&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal_options.c?cvsroot=antiright&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal_struct.h?cvsroot=antiright&r1=1.10&r2=1.11

Patches:
Index: add_options.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/add_options.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- add_options.c       12 Nov 2007 01:21:33 -0000      1.49
+++ add_options.c       24 Nov 2007 10:53:41 -0000      1.50
@@ -100,11 +100,16 @@
 static void
 add_shell(GSH * gsh, const gchar * command)
 {
+       GtkWidget * terminal;
+       if(!gsh->terminal)
+               gsh->terminal=ARNEW(gsh, GSH_Terminal, gsh);
        /* Create a terminal widget that is running COMMAND.  */
-       const GtkWidget * terminal = $(gsh->terminal, add, command);
-
+       terminal = $(gsh->terminal, add, command);
+       if(terminal) /* NULL if terminal is a tab.  */
+       {
        /* Let GSH manage the terminal widget.  */
        $(gsh, manage, (GtkWidget *)terminal);
+       }
 }
 #endif /* HAVE_VTE */
 
@@ -194,7 +199,7 @@
                break;
 
        case 'Q':
-       {
+       { /* FIXME: make it useful.  */
                GSHQuickStart * quickstart;
                quickstart=ARNEW(gsh, GSHQuickStart);
                GSH_COUNT(argc, counter);

Index: terminal.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- terminal.c  2 Oct 2007 14:35:37 -0000       1.28
+++ terminal.c  24 Nov 2007 10:53:41 -0000      1.29
@@ -181,12 +181,93 @@
        connect_terminal_signals_with_data(gsh, widget);
 }
 
+struct TabData 
+{
+       struct GSH_Terminal * term;
+       gint tab_id;
+};
+
+static void
+tab_button_close_cb(GtkWidget * button, gpointer data)
+{
+       struct TabData * close_data=data;
+       GtkWidget * terminal;
+       GtkNotebook * notebook = GTK_NOTEBOOK(close_data->term->__notebook);
+       const gint tab_id=close_data->tab_id;
+
+       terminal=gtk_notebook_get_nth_page(notebook, tab_id);
+       gtk_notebook_remove_page(notebook, tab_id);
+       //gtk_widget_destroy(terminal);
+       //free(close_data);
+}
+
+static void
+tab_button_callback(GtkWidget * button, gpointer data)
+{
+       struct GSH_Terminal * term=data;
+       $(term, add, term->__tab_command);
+}
+
+static void
+make_tab_label(struct GSH_Terminal * term, const gchar * command,
+       GtkWidget * hbox, gint tab_id)
+{
+       GtkWidget * button;
+       GtkWidget * close_button;
+       GtkWidget * label;
+       GtkWidget * new_image;
+       GtkWidget * close_image;
+       struct TabData * close_data= malloc(sizeof(struct TabData));
+
+       close_data->term=term;
+       close_data->tab_id=tab_id;
+       gtk_widget_show(label=gtk_label_new(command));
+       GSHCA(hbox, label);
+       gtk_widget_show(new_image=gtk_image_new_from_stock("gtk-new", 
+               GTK_ICON_SIZE_MENU));
+       gtk_widget_show(button=gtk_button_new());
+       gtk_button_set_image(GTK_BUTTON(button), new_image);
+       close_button=gtk_button_new();
+       close_image=gtk_image_new_from_stock("gtk-close",
+               GTK_ICON_SIZE_MENU);
+       gtk_widget_show(close_image);
+       gtk_button_set_image(GTK_BUTTON(close_button), close_image);
+       gtk_widget_show(close_button);
+       GSHCA(hbox, close_button);
+       GSHCONNECT(close_button, "clicked", tab_button_close_cb, close_data);
+
+       gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE);
+       gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+
+       term->__tab_command=(gchar *)command;
+       GSHCONNECT(button, "clicked", tab_button_callback, term);
+       GSHCA(hbox, button);
+}
+
+static void
+new_terminal_tab(struct GSH_Terminal * term, const gchar * command)
+{
+       GtkWidget * hbox;
+       gint tab_id;
+
+       gtk_widget_show(hbox=gtk_hbox_new(FALSE, 0));
+       gtk_widget_show(term->widget=vte_terminal_new());
+       tab_id=gtk_notebook_append_page(GTK_NOTEBOOK(term->__notebook), 
+               term->widget, hbox);
+       make_tab_label(term, command, hbox, tab_id);
+}
+
 static GtkWidget *
 gsh_GSH_Terminal_add(struct GSH_Terminal * term, const gchar * command)
 {
+       gboolean original_tab=TRUE;
        /* Create and set properties of the VTE-based terminal.  */
 #ifdef HAVE_VTE
-       term->widget = vte_terminal_new();
+       if(!term->__notebook)
+               gtk_widget_show(term->__notebook=gtk_notebook_new());
+       else
+               original_tab=FALSE;
+       new_terminal_tab(term, command);
 #else /* not HAVE_VTE */
        term->widget = NULL;
 #endif /* HAVE_VTE */
@@ -194,7 +275,7 @@
        set_terminal_options(term);
        gsh_terminal_run(term, command);
 
-       return term->widget;
+       return original_tab ? term->__notebook : NULL;
 }
 
 static void
@@ -211,6 +292,7 @@
        term->font=NULL;
        term->dimensions.width=80;
        term->dimensions.height=24;
+       term->__notebook=NULL;
 }
 
 static void

Index: terminal.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- terminal.h  11 Jun 2007 21:32:44 -0000      1.6
+++ terminal.h  24 Nov 2007 10:53:41 -0000      1.7
@@ -24,6 +24,6 @@
 #define GSH_TERMINAL_H
 
 struct GSH_Terminal *
-gsh_new_GSH_Terminal();
+gsh_new_GSH_Terminal(GSH * gsh);
 
 #endif

Index: terminal_options.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal_options.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- terminal_options.c  21 Jul 2007 16:18:51 -0000      1.8
+++ terminal_options.c  24 Nov 2007 10:53:41 -0000      1.9
@@ -43,6 +43,10 @@
                        GSH_COUNT(argc, counter);
                        GSHTD.height=atoi(argv[*counter]);
                        break;
+               case 'N': /* Make a new terminal instead of 
+                            a new tab for next terminal.  */
+                       gsh->terminal=NULL;
+                       break;
                case 'T': /* Set not transparent.  (Default) */
                        GSH_UNSET(GSH_TERM_TRANSPARENT);
                        break;

Index: terminal_struct.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal_struct.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- terminal_struct.h   11 Jun 2007 21:32:44 -0000      1.10
+++ terminal_struct.h   24 Nov 2007 10:53:41 -0000      1.11
@@ -32,6 +32,8 @@
        void (*delete)(struct GSH_Terminal *);
        GtkWidget * (*add)(struct GSH_Terminal *, const gchar *);
        gpointer gsh;
+       GtkWidget * __notebook;
+       gchar * __tab_command;
 };
 
 struct GSH_Terminal *




reply via email to

[Prev in Thread] Current Thread [Next in Thread]