[Top][All Lists]
[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 *
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Antiright-devel] antiright/gtkshell add_options.c terminal.c ter...,
Jeffrey Bedard <=