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 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);
        }
 }




reply via email to

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