[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Antiright-devel] antiright/gtkshell add_options.c arguments.c bu...
From: |
Jeffrey Bedard |
Subject: |
[Antiright-devel] antiright/gtkshell add_options.c arguments.c bu... |
Date: |
Wed, 02 May 2007 14:55:31 +0000 |
CVSROOT: /sources/antiright
Module name: antiright
Changes by: Jeffrey Bedard <jefbed> 07/05/02 14:55:31
Modified files:
gtkshell : add_options.c arguments.c button.c containers.c
gtkshell.c gtkshell.h image_button.c init.c
init.h macros.h main.c menu.c option_options.c
row.c terminal.c terminal_options.c
terminal_struct.h updated.c
Log message:
Changed stack allocation to heap based allocation following antiright
object system conventions. Changed initialization to use object
methods.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/add_options.c?cvsroot=antiright&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/arguments.c?cvsroot=antiright&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/button.c?cvsroot=antiright&r1=1.31&r2=1.32
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/containers.c?cvsroot=antiright&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/gtkshell.c?cvsroot=antiright&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/gtkshell.h?cvsroot=antiright&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/image_button.c?cvsroot=antiright&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/init.c?cvsroot=antiright&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/init.h?cvsroot=antiright&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/macros.h?cvsroot=antiright&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/main.c?cvsroot=antiright&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/menu.c?cvsroot=antiright&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/option_options.c?cvsroot=antiright&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/row.c?cvsroot=antiright&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal.c?cvsroot=antiright&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal_options.c?cvsroot=antiright&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal_struct.h?cvsroot=antiright&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/updated.c?cvsroot=antiright&r1=1.12&r2=1.13
Patches:
Index: add_options.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/add_options.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- add_options.c 30 Apr 2007 18:15:22 -0000 1.22
+++ add_options.c 2 May 2007 14:55:31 -0000 1.23
@@ -25,10 +25,9 @@
static void
add_new_window(struct GSH * gsh)
{
- gsh->window=gsh_create_main_window();
- gsh->rows.row=1;
- gsh_setup_containers(gsh);
- gtk_widget_show(gsh->window);
+ gsh->window=$(gsh, new_window);
+ gsh->rows->current=1;
+ $(gsh, init);
}
static void
@@ -61,13 +60,8 @@
static void
add_separator(struct GSH * gsh)
{
- GtkWidget * separator;
-
- separator = (gsh->rows.rows == 1)
- ? gtk_vseparator_new() : gtk_hseparator_new();
-
- gsh_manage(gsh, separator);
- gtk_widget_show(separator);
+ gsh_manage(gsh, (gsh->rows->total == 1)
+ ? gtk_vseparator_new() : gtk_hseparator_new());
}
static void
Index: arguments.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/arguments.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- arguments.c 21 Apr 2007 22:21:57 -0000 1.19
+++ arguments.c 2 May 2007 14:55:31 -0000 1.20
@@ -59,7 +59,7 @@
}
void
-gsh_parse_arguments(struct GSH * gsh, int argc, char **argv)
+gsh_parse_arguments(struct GSH * gsh, gint argc, gchar **argv)
{
int counter;
Index: button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/button.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- button.c 30 Apr 2007 18:15:22 -0000 1.31
+++ button.c 2 May 2007 14:55:31 -0000 1.32
@@ -66,8 +66,8 @@
static void
create_button(struct GSH * gsh)
{
- if(!GTK_IS_MENU(gsh->rows.v)
- && !GTK_IS_MENU_BAR(gsh->rows.v))
+ if(!GTK_IS_MENU(gsh->rows->v)
+ && !GTK_IS_MENU_BAR(gsh->rows->v))
gsh->button = gtk_button_new();
else
gsh->button = gtk_menu_item_new();
Index: containers.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/containers.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- containers.c 16 Mar 2007 00:39:31 -0000 1.10
+++ containers.c 2 May 2007 14:55:31 -0000 1.11
@@ -55,14 +55,14 @@
frame);
gtk_widget_show(frame);
gtk_container_add(GTK_CONTAINER(frame),
- gsh->rows.h);
+ gsh->rows->h);
}
void
gsh_setup_containers(struct GSH * gsh)
{
- gsh->rows.h = gtk_hbox_new(FALSE, 2);
- gtk_widget_show(gsh->rows.h);
+ gsh->rows->h = gtk_hbox_new(FALSE, 2);
+ gtk_widget_show(gsh->rows->h);
gsh_new_row(gsh);
}
@@ -74,11 +74,11 @@
gsh_setup_scrolled_window(gsh);
gtk_scrolled_window_add_with_viewport(
GTK_SCROLLED_WINDOW(gsh->scrolled_window),
- gsh->rows.h);
+ gsh->rows->h);
}
else if (!GSH_FLAG(GSH_NO_BASE_FRAME))
setup_framed(gsh);
else
- gtk_container_add(GTK_CONTAINER(gsh->window), gsh->rows.h);
+ gtk_container_add(GTK_CONTAINER(gsh->window), gsh->rows->h);
}
Index: gtkshell.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/gtkshell.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- gtkshell.c 28 Apr 2007 22:26:23 -0000 1.26
+++ gtkshell.c 2 May 2007 14:55:31 -0000 1.27
@@ -37,24 +37,52 @@
setup_quit_signal(window, "destroy");
}
-GtkWidget *
+static GtkWidget *
gsh_create_main_window()
{
GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-
setup_quit_signals(window);
return (window);
}
+
+static void
+gsh_delete_GSH_Rows(struct GSH_Rows * rows)
+{
+ gtk_widget_destroy(rows->h);
+ gtk_widget_destroy(rows->v);
+ g_free(rows);
+}
+
static void
gsh_setup_GSH_Rows(struct GSH_Rows * rows)
{
- rows->row = 1;
+ rows->current = 1;
/* Use an arbitrary, though reasonable, initial number of rows. */
- rows->rows = 8;
+ rows->total = 8;
+ rows->delete = &gsh_delete_GSH_Rows;
}
+
+struct GSH_Rows *
+gsh_new_GSH_Rows()
+{
+ struct GSH_Rows * rows;
+
+ rows=xmalloc(sizeof(struct GSH_Rows));
+ gsh_setup_GSH_Rows(rows);
+
+ return rows;
+}
+
+static void
+gsh_delete_GSH_Updater(struct GSH_Updater * updater)
+{
+ g_slist_free(updater->list);
+ g_free(updater);
+}
+
static void
gsh_setup_GSH_Updater(struct GSH_Updater * update)
{
@@ -62,15 +90,53 @@
/* Pointer must have not previously been used. */
update->list = (GSList *) NULL;
+ update->delete=&gsh_delete_GSH_Updater;
+}
+
+struct GSH_Updater *
+gsh_new_GSH_Updater()
+{
+ struct GSH_Updater * updater;
+
+ updater=xmalloc(sizeof(struct GSH_Updater));
+ gsh_setup_GSH_Updater(updater);
+
+ return updater;
+}
+
+
+static void
+gsh_delete_GSH(struct GSH * gsh)
+{
+ $(gsh->rows, delete);
+ $(gsh->terminal, delete);
+ $(gsh->update, delete);
+ GSH_DESTROY_IF(gsh->button);
+ GSH_DESTROY_IF(gsh->window);
+ GSH_DESTROY_IF(gsh->scrolled_window);
+ GSH_FREE_IF(gsh->geometry);
}
-void
+
+static GtkWidget *
+gsh_GSH_new_window(struct GSH * gsh)
+{
+ UNUSED(gsh);
+ return gsh_create_main_window();
+}
+
+static void
gsh_setup_GSH(struct GSH * gsh)
{
gsh->geometry = (gchar *)NULL;
- gsh->bflags=0;
- gsh_setup_GSH_Rows(&(gsh->rows));
- gsh_setup_GSH_Updater(&(gsh->update));
- gsh_setup_GSH_Terminal(&(gsh->terminal));
+ gsh->bflags = 0;
+ gsh->update = ARNEW(gsh, GSH_Updater);
+ gsh->rows = ARNEW(gsh, GSH_Rows);
+ gsh->terminal = ARNEW(gsh, GSH_Terminal);
+ gsh->delete = &gsh_delete_GSH;
+ gsh->parse = &gsh_parse_arguments;
+ gsh->finalize = &gsh_GSH_finalize;
+ gsh->init = &gsh_GSH_init;
+ gsh->window = (*(gsh->new_window = &gsh_GSH_new_window))(gsh);
}
struct GSH *
@@ -84,17 +150,3 @@
return gsh;
}
-void
-gsh_cleanup(struct GSH * gsh)
-{
- /* If the terminal was used, it created a temporary command script,
- * which must be removed on program exit. A better way to do this would
- * be to install a timer to remove the script. This is necessary as
- * premature script removal breaks the terminal command fork. */
- if(gsh->terminal.script != NULL)
- {
- unlink(gsh->terminal.script);
- free(gsh->terminal.script);
- }
-}
-
Index: gtkshell.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/gtkshell.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- gtkshell.h 28 Apr 2007 22:26:23 -0000 1.35
+++ gtkshell.h 2 May 2007 14:55:31 -0000 1.36
@@ -43,16 +43,24 @@
{
GtkWidget *h;
GtkWidget *v;
- unsigned int row;
- unsigned int rows;
+ unsigned int current;
+ unsigned int total;
+ void (*delete)(struct GSH_Rows *);
};
+struct GSH_Rows *
+gsh_new_GSH_Rows();
+
struct GSH_Updater
{
unsigned int period;
/address@hidden@*/ GSList *list;
+ void (*delete)(struct GSH_Updater *);
};
+struct GSH_Updater *
+gsh_new_GSH_Updater();
+
#include "macros.h"
#include "terminal_struct.h"
@@ -61,12 +69,17 @@
{
GtkWidget *window;
GtkWidget *scrolled_window;
- struct GSH_Rows rows;
- struct GSH_Updater update;
- struct GSH_Terminal terminal;
+ struct GSH_Rows * rows;
+ struct GSH_Updater * update;
+ struct GSH_Terminal * terminal;
GtkWidget *button;
/address@hidden@*/ gchar *geometry;
Bitmask bflags;
+ void (*delete)(struct GSH *);
+ void (*parse)(struct GSH *, gint, gchar **);
+ void (*init)(struct GSH *);
+ void (*finalize)(struct GSH *);
+ GtkWidget * (*new_window)(struct GSH *);
};
#include "arguments.h"
@@ -100,16 +113,7 @@
#include "guidl_options.h"
#include "guidl_widgets.h"
-GtkWidget *
-gsh_create_main_window();
-
-void
-gsh_setup_GSH(struct GSH * gsh);
-
struct GSH *
gsh_new_GSH();
-void
-gsh_cleanup(struct GSH * gsh);
-
#endif
Index: image_button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/image_button.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- image_button.c 27 Apr 2007 20:51:42 -0000 1.9
+++ image_button.c 2 May 2007 14:55:31 -0000 1.10
@@ -27,8 +27,8 @@
GtkWidget * image)
{
gsh_command_button(gsh, command);
- if(!GTK_IS_MENU_BAR(gsh->rows.v) && !GTK_IS_MENU_ITEM(gsh->rows.v)
- && !GTK_IS_MENU(gsh->rows.v))
+ if(!GTK_IS_MENU_BAR(gsh->rows->v) && !GTK_IS_MENU_ITEM(gsh->rows->v)
+ && !GTK_IS_MENU(gsh->rows->v))
{
gtk_button_set_image(GTK_BUTTON(gsh->button), image);
gtk_button_set_relief(GTK_BUTTON(gsh->button), GTK_RELIEF_NONE);
Index: init.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/init.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- init.c 28 Apr 2007 22:26:23 -0000 1.2
+++ init.c 2 May 2007 14:55:31 -0000 1.3
@@ -22,38 +22,16 @@
#include "gtkshell.h"
-/* Allocate and initialize a GSH structure on the heap. */
-struct GSH *
-gsh_init(int *argc, char ***argv)
-{
- struct GSH *gsh;
-
- gsh = gsh_new_GSH();
- gsh_stack_init(gsh, argc, argv);
-
- return gsh;
-}
-
-/* Initialize a GSH structure stored on the stack. */
void
-gsh_stack_init(struct GSH * gsh, int *argc, char ***argv)
+gsh_GSH_init(struct GSH * gsh)
{
- gtk_init(argc, argv);
- gsh_setup_GSH(gsh);
- gsh->window = gsh_create_main_window();
+ /* Initialize toplevel child containers, with parenting delayed. */
+ gsh_setup_containers(gsh);
}
-/* Combined initialization routine for setup of gtkshell-based application,
- * using a stack-stored GSH application structure. */
void
-gsh_init_GUI(struct GSH * gsh, int * argc, char *** argv)
+gsh_GSH_finalize(struct GSH * gsh)
{
- gsh_stack_init(gsh, argc, argv);
-
- /* Initialize toplevel child containers, with parenting delayed. */
- gsh_setup_containers(gsh);
- /* Create all application widgets based on command line arguments. */
- gsh_parse_arguments(gsh, *argc, *argv);
/* Choose the correct parenting of the widget hierarchy based on options
* set. */
gsh_setup_base_container(gsh);
Index: init.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/init.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- init.h 6 Apr 2007 15:32:22 -0000 1.1
+++ init.h 2 May 2007 14:55:31 -0000 1.2
@@ -23,13 +23,11 @@
#ifndef GSH_INIT_H
#define GSH_INIT_H
-struct GSH *
-gsh_init(int *argc, char ***argv);
-
void
-gsh_stack_init(struct GSH * gsh, int *argc, char ***argv);
+gsh_GSH_init(struct GSH * gsh);
void
-gsh_init_GUI(struct GSH * gsh, int * argc, char *** argv);
+gsh_GSH_finalize(struct GSH * gsh);
+
#endif /* GSH_INIT_H */
Index: macros.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/macros.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- macros.h 30 Apr 2007 18:15:22 -0000 1.4
+++ macros.h 2 May 2007 14:55:31 -0000 1.5
@@ -41,5 +41,9 @@
#define GSH_SET(flag) gsh->bflags |= flag
#define GSH_UNSET(flag) gsh->bflags &= ~flag
+#define GSH_ACTION_IF(action, arg) if(arg) action(arg)
+#define GSH_DESTROY_IF(widget) GSH_ACTION_IF(gtk_widget_destroy, widget)
+#define GSH_FREE_IF(var) GSH_ACTION_IF(g_free, var)
+
#endif /* not GSH_MACROS_H */
Index: main.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/main.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- main.c 6 Apr 2007 15:32:22 -0000 1.18
+++ main.c 2 May 2007 14:55:31 -0000 1.19
@@ -26,12 +26,16 @@
int
main(int argc, char **argv)
{
- /* Store application structure on stack. */
- struct GSH gsh;
+ struct GSH * gsh;
- gsh_init_GUI(&gsh, &argc, &argv); /* Setup GUI. */
+ gtk_init(&argc, &argv);
+ gsh=ARNEW(gsh, GSH);
+ $(gsh, init);
+ $(gsh, parse, argc, argv); /* Setup GUI. */
+ $(gsh, finalize);
gtk_main(); /* application main loop */
- gsh_cleanup(&gsh); /* Clean temporary files. */
+ /* Cleanup when finished. */
+ $(gsh, delete);
return (EXIT_SUCCESS);
}
Index: menu.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/menu.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- menu.c 28 Apr 2007 22:26:23 -0000 1.5
+++ menu.c 2 May 2007 14:55:31 -0000 1.6
@@ -50,17 +50,17 @@
gint i;
GtkWidget * old_row;
- /* Set gsh->rows.v to a row within a menu.
+ /* Set gsh->rows->v to a row within a menu.
* Create the menu before overwriting, then
* set back at end. */
- old_row=gsh->rows.v;
- gsh->rows.v=menu;
+ old_row=gsh->rows->v;
+ gsh->rows->v=menu;
for(i=1; ARPBOOL(tokens[i]); i++)
menuitem_parse(gsh, tokens[i]);
- gsh->rows.v=old_row;
+ gsh->rows->v=old_row;
}
static GtkWidget *
@@ -80,14 +80,14 @@
{
GtkWidget * old_row;
- old_row=gsh->rows.v;
- gsh->rows.v=add_menu_bar(gsh);
+ old_row=gsh->rows->v;
+ gsh->rows->v=add_menu_bar(gsh);
GSH_SET(GSH_MENU_BUTTON);
{
GtkWidget * menu_item;
gtk_widget_show(menu_item=gsh_add_button(gsh, label));
- gsh->rows.v=old_row;
+ gsh->rows->v=old_row;
return menu_item;
}
Index: option_options.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/option_options.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- option_options.c 30 Apr 2007 18:15:22 -0000 1.21
+++ option_options.c 2 May 2007 14:55:31 -0000 1.22
@@ -105,8 +105,7 @@
case 'r': /* Set number of rows per column. */
gsh_count(argc, counter);
- gsh->rows.rows =
- (unsigned int) atoi(argv[(*counter)]);
+ gsh->rows->total=(unsigned int)atoi(argv[(*counter)]);
break;
case 's': /* Use scrolling parent container. */
@@ -124,7 +123,7 @@
case 'u': /* Set time for updating widgets' timer, in miliseconds. */
gsh_count(argc, counter);
- gsh->update.period = atoi(argv[*counter]);
+ gsh->update->period = atoi(argv[*counter]);
break;
}
}
Index: row.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/row.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- row.c 30 Apr 2007 18:15:22 -0000 1.18
+++ row.c 2 May 2007 14:55:31 -0000 1.19
@@ -26,14 +26,7 @@
gsh_manage_generic(struct GSH * gsh, GtkWidget *widget)
{
gtk_widget_show(widget);
- gsh->rows.row++;
-
-}
-
-static void
-manage_menu_item(GtkWidget * container, GtkWidget * widget)
-{
- gtk_menu_shell_append(GTK_MENU_SHELL(container), widget);
+ gsh->rows->current++;
}
static gboolean
@@ -41,7 +34,7 @@
{
if(GTK_IS_MENU(container) || GTK_IS_MENU_BAR(container)
|| GTK_IS_MENU_ITEM(container))
- manage_menu_item(container, widget);
+ gtk_menu_shell_append(GTK_MENU_SHELL(container), widget);
else
return FALSE;
@@ -51,10 +44,10 @@
static void
manage_normal(struct GSH * gsh, GtkWidget * widget)
{
- if(test_manage_menu_item(gsh->rows.v, widget))
+ if(test_manage_menu_item(gsh->rows->v, widget))
return;
gsh_check_row(gsh);
- gtk_container_add(GTK_CONTAINER(gsh->rows.v), widget);
+ gtk_container_add(GTK_CONTAINER(gsh->rows->v), widget);
gsh_manage_generic(gsh, widget);
}
@@ -62,7 +55,7 @@
test_manage_unexpanded(struct GSH * gsh)
{
/* Alias to reduce dereferences. */
- GtkWidget * container = gsh->rows.v;
+ GtkWidget * container = gsh->rows->v;
/*
* Checking for a 1 row counter allows the ACE Deskbar to
@@ -70,7 +63,7 @@
*/
return (GSH_FLAG(GSH_NO_EXPAND)
- &&(gsh->rows.rows != 1)
+ &&(gsh->rows->total != 1)
&& !GTK_IS_MENU(container)
&& !GTK_IS_MENU_BAR(container)
&& !GTK_IS_MENU_ITEM(container));
@@ -80,7 +73,7 @@
manage_unexpanded(struct GSH * gsh, GtkWidget * widget)
{
gsh_check_row(gsh);
- gtk_box_pack_start(GTK_BOX(gsh->rows.v), widget,
+ gtk_box_pack_start(GTK_BOX(gsh->rows->v), widget,
FALSE, FALSE, 0);
gsh_manage_generic(gsh, widget);
}
@@ -97,15 +90,15 @@
void
gsh_new_row(struct GSH * gsh)
{
- GtkWidget * column = gsh->rows.v = gtk_vbox_new(FALSE, 2);
- gtk_container_add(GTK_CONTAINER(gsh->rows.h), column);
+ GtkWidget * column = gsh->rows->v = gtk_vbox_new(FALSE, 2);
+ gtk_container_add(GTK_CONTAINER(gsh->rows->h), column);
gtk_widget_show(column);
- gsh->rows.row = 1;
+ gsh->rows->current = 1;
}
void
gsh_check_row(struct GSH * gsh)
{
- if (gsh->rows.row > gsh->rows.rows)
+ if (gsh->rows->current > gsh->rows->total)
gsh_new_row(gsh);
}
Index: terminal.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- terminal.c 28 Apr 2007 22:26:23 -0000 1.8
+++ terminal.c 2 May 2007 14:55:31 -0000 1.9
@@ -26,24 +26,24 @@
set_size(struct GSH * gsh)
{
- if(gsh->terminal.width==0)
- gsh->terminal.width=80;
- if(gsh->terminal.height==0)
- gsh->terminal.height=32;
-
- vte_terminal_set_size(VTE_TERMINAL(gsh->terminal.widget),
- gsh->terminal.width,
- gsh->terminal.height);
+ if(gsh->terminal->width==0)
+ gsh->terminal->width=80;
+ if(gsh->terminal->height==0)
+ gsh->terminal->height=32;
+
+ vte_terminal_set_size(VTE_TERMINAL(gsh->terminal->widget),
+ gsh->terminal->width,
+ gsh->terminal->height);
}
static void
set_font(struct GSH * gsh)
{
- if(gsh->terminal.font==NULL)
- gsh_widget_set_font_mono(gsh->terminal.widget);
+ if(gsh->terminal->font==NULL)
+ gsh_widget_set_font_mono(gsh->terminal->widget);
else
- gsh_widget_set_font(gsh->terminal.widget,
- gsh->terminal.font);
+ gsh_widget_set_font(gsh->terminal->widget,
+ gsh->terminal->font);
}
static void
@@ -52,7 +52,7 @@
GtkWidget * term;
/* Assign a shortcut reference. */
- term=gsh->terminal.widget;
+ term=gsh->terminal->widget;
set_size(gsh);
vte_terminal_set_allow_bold(VTE_TERMINAL(term), TRUE);
@@ -123,7 +123,7 @@
if(fprintf(script, "#!/bin/sh\nexport LINES=%d\n"
"export COLUMNS=%d\n%s\n",
- gsh->terminal.height, gsh->terminal.width, command)
+ gsh->terminal->height, gsh->terminal->width, command)
== -1)
ARERR("cannot write to script file");
fclose(script); /* Close and flush buffers. */
@@ -142,16 +142,36 @@
gsh_terminal_run(struct GSH * gsh, const gchar * command)
{
/* Get command to run. */
- gsh->terminal.script=gsh_terminal_command_script(gsh, command);
+ gsh->terminal->script=gsh_terminal_command_script(gsh, command);
- /* Run the script in the terminal widget. */
- vte_terminal_fork_command(VTE_TERMINAL(gsh->terminal.widget),
- gsh->terminal.script, NULL, NULL,
+ /* Run the script in the terminal->widget. */
+ vte_terminal_fork_command(VTE_TERMINAL(gsh->terminal->widget),
+ gsh->terminal->script, NULL, NULL,
NULL, TRUE, TRUE, TRUE);
/* SCRIPT must be freed later, so preserve reference. */
}
+static void
+cleanup_script(gchar * script)
+{
+ /* If the terminal was used, it created a temporary command script,
+ * which must be removed on program exit. A better way to do this would
+ * be to install a timer to remove the script. This is necessary as
+ * premature script removal breaks the terminal command fork. */
+ unlink(script);
+ free(script);
+}
+
+static void
+gsh_delete_GSH_Terminal(struct GSH_Terminal * term)
+{
+ gtk_widget_destroy(term->widget);
+ GSH_FREE_IF(term->font);
+ GSH_ACTION_IF(cleanup_script, term->script);
+ g_free(term);
+}
+
void
gsh_setup_GSH_Terminal(struct GSH_Terminal * term)
{
@@ -160,25 +180,37 @@
term->script=NULL;
term->width=80;
term->height=24;
+ term->delete=&gsh_delete_GSH_Terminal;
+}
+
+struct GSH_Terminal *
+gsh_new_GSH_Terminal()
+{
+ struct GSH_Terminal * term;
+
+ term=xmalloc(sizeof(struct GSH_Terminal));
+ gsh_setup_GSH_Terminal(term);
+
+ return term;
}
void
gsh_setup_terminal(struct GSH * gsh, const gchar * command)
{
/* VTE-based terminal. */
- gsh->terminal.widget=vte_terminal_new();
+ gsh->terminal->widget=vte_terminal_new();
/* Set properties. */
gsh_set_terminal_options(gsh);
/* Display widget. */
- gtk_widget_show(gsh->terminal.widget);
+ gtk_widget_show(gsh->terminal->widget);
/* Exit from the application if the terminal process dies. */
- g_signal_connect(G_OBJECT(gsh->terminal.widget), "child-exited",
+ g_signal_connect(G_OBJECT(gsh->terminal->widget), "child-exited",
G_CALLBACK(gtk_main_quit), NULL);
/* Add to the gtkshell row/column grid. */
- gsh_manage(gsh, gsh->terminal.widget);
+ gsh_manage(gsh, gsh->terminal->widget);
gsh_terminal_run(gsh, command);
}
Index: terminal_options.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal_options.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- terminal_options.c 19 Mar 2007 07:09:30 -0000 1.1
+++ terminal_options.c 2 May 2007 14:55:31 -0000 1.2
@@ -32,15 +32,15 @@
{
case 'f': /* Set font for terminal widget. */
gsh_count(argc, counter);
- gsh->terminal.font=argv[*counter];
+ gsh->terminal->font=argv[*counter];
break;
case 'h': /* Set terminal widget height. */
gsh_count(argc, counter);
- gsh->terminal.height=atoi(argv[*counter]);
+ gsh->terminal->height=atoi(argv[*counter]);
break;
case 'w': /* Set terminal widget width. */
gsh_count(argc, counter);
- gsh->terminal.width=atoi(argv[*counter]);
+ gsh->terminal->width=atoi(argv[*counter]);
break;
default: /* Error message. */
ARWARN("invalid tertiary terminal option");
Index: terminal_struct.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal_struct.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- terminal_struct.h 24 Mar 2007 04:17:13 -0000 1.2
+++ terminal_struct.h 2 May 2007 14:55:31 -0000 1.3
@@ -29,10 +29,14 @@
gchar * font;
gchar * script;
guint width, height;
+ void (*delete)(struct GSH_Terminal *);
};
void
gsh_GSH_Terminal(struct GSH_Terminal * term);
+struct GSH_Terminal *
+gsh_new_GSH_Terminal();
+
#endif /* not GSH_TERMINAL_STRUCT_H */
Index: updated.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/updated.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- updated.c 2 Mar 2007 19:12:00 -0000 1.12
+++ updated.c 2 May 2007 14:55:31 -0000 1.13
@@ -32,7 +32,7 @@
#endif /* DEBUG */
if (ARPBOOL(gsh) && ARPBOOL(item))
- gsh->update.list = g_slist_prepend(gsh->update.list, item);
+ gsh->update->list = g_slist_prepend(gsh->update->list, item);
#ifdef DEBUG
ARBUG("end gsh_append_updater()");
@@ -45,8 +45,7 @@
const gchar *command, GtkWidget *widget)
{
/* Assign the values to ITEM's members. */
-
- ar_asprintf(&item->command, "%s", command);
+ item->command=g_strdup(command);
/* No allocation necessary as these are duplicate pointers. */
@@ -105,8 +104,8 @@
gsh = (struct GSH *) data;
- if (ARPBOOL(gsh) && ARPBOOL(gsh->update.list))
- g_slist_foreach(gsh->update.list, gsh_update_each, gsh);
+ if (ARPBOOL(gsh) && ARPBOOL(gsh->update->list))
+ g_slist_foreach(gsh->update->list, gsh_update_each, gsh);
else
{
ARWARN("data invalid, operation not performed.");
@@ -127,7 +126,7 @@
ARWIFNP (gsh)
{
(void) gsh_perform_updates(gsh);
- (void) g_timeout_add(gsh->update.period, gsh_perform_updates,
+ (void) g_timeout_add(gsh->update->period, gsh_perform_updates,
gsh);
}
}
- [Antiright-devel] antiright/gtkshell add_options.c arguments.c bu...,
Jeffrey Bedard <=