antiright-devel
[Top][All Lists]
Advanced

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

[Antiright-devel] antiright ACE-desktop/guidl/IDE.gdl gtkshell/bu...


From: Jeffrey Bedard
Subject: [Antiright-devel] antiright ACE-desktop/guidl/IDE.gdl gtkshell/bu...
Date: Tue, 08 May 2007 20:40:08 +0000

CVSROOT:        /sources/antiright
Module name:    antiright
Changes by:     Jeffrey Bedard <jefbed> 07/05/08 20:40:07

Modified files:
        ACE-desktop/guidl: IDE.gdl 
        gtkshell       : button.c callbacks.c callbacks.h gtkshell.c 
                         gtkshell.h menu.c terminal.c terminal_struct.h 
                         text.c updated_label.c 

Log message:
        Added terminal special callback commands.  Various refactorings
        to improve code size and readability.  

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/antiright/ACE-desktop/guidl/IDE.gdl?cvsroot=antiright&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/button.c?cvsroot=antiright&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/callbacks.c?cvsroot=antiright&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/callbacks.h?cvsroot=antiright&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/gtkshell.c?cvsroot=antiright&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/gtkshell.h?cvsroot=antiright&r1=1.43&r2=1.44
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/menu.c?cvsroot=antiright&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal.c?cvsroot=antiright&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/terminal_struct.h?cvsroot=antiright&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/text.c?cvsroot=antiright&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/antiright/gtkshell/updated_label.c?cvsroot=antiright&r1=1.17&r2=1.18

Patches:
Index: ACE-desktop/guidl/IDE.gdl
===================================================================
RCS file: /sources/antiright/antiright/ACE-desktop/guidl/IDE.gdl,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- ACE-desktop/guidl/IDE.gdl   8 May 2007 13:05:29 -0000       1.18
+++ ACE-desktop/guidl/IDE.gdl   8 May 2007 20:40:07 -0000       1.19
@@ -13,6 +13,10 @@
        "File::Exit__,gtk-quit",
        "Help::gtkshell -da & # About,gtk-about";
 
+// set up status bar.
+option "update frequency" 10000;
+add "updating label" "echo -n 'Recent: '; ls -t | tr '\n' ' ' | cut -d ' ' 
-f-6";
+
 option "icon size" "small toolbar";
 
 option "no fill";

Index: gtkshell/button.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/button.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- gtkshell/button.c   6 May 2007 06:23:36 -0000       1.38
+++ gtkshell/button.c   8 May 2007 20:40:07 -0000       1.39
@@ -47,10 +47,15 @@
 setup_callback(struct GSH * gsh, const gchar * command)
 {
        if(!GSH_FLAG(GSH_MENU_BUTTON))
+       {
+               struct GSHCBData * cb;
+
+               cb=ARNEW(gsh, GSHCBData, gsh, g_strdup(command));
                (void)g_signal_connect(G_OBJECT(gsh->widgets.button), 
-                       GTK_IS_MENU_ITEM(gsh->widgets.button) ? "activate" : 
"clicked",
-                       G_CALLBACK(gsh_system_cb), 
-                       ARNEW(gsh, GSH_CBData, gsh, g_strdup(command)));
+                       GTK_IS_MENU_ITEM(gsh->widgets.button) 
+                       ? "activate" : "clicked",
+                       G_CALLBACK(cb->system), cb);
+       }
        else
                GSH_UNSET(GSH_MENU_BUTTON);
 }

Index: gtkshell/callbacks.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/callbacks.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- gtkshell/callbacks.c        6 May 2007 06:23:36 -0000       1.22
+++ gtkshell/callbacks.c        8 May 2007 20:40:07 -0000       1.23
@@ -22,25 +22,15 @@
 
 #include "gtkshell.h"
 
-struct GSH_CBData *
-gsh_new_GSH_CBData(struct GSH * gsh, gpointer data)
-{
-       struct GSH_CBData * cb;
-
-       cb = xmalloc(sizeof(struct GSH_CBData));
-       cb->gsh=gsh;
-       cb->data=data;
-
-       return cb;
-}
-
-void
-gsh_delete_GSH_CBData(struct GSH_CBData * cb)
+static void
+gsh_delete_GSHCBData(struct GSHCBData * cb)
 {
        g_free(cb->data);
        g_free(cb);
 }
 
+
+
 static void
 gsh_test_exit(struct GSH * gsh)
 {
@@ -51,20 +41,58 @@
                gtk_main_quit();
 }
 
+static void
+terminal_feed(gchar * command, GtkWidget * terminal)
+{
+       gchar ** split_command;
+       gchar * feed_command;
+
+       if(!terminal)
+       {
+               ARWARN("terminal command requires a terminal" 
+                       "to have been created");
+               return;
+       }       
+
+       command+=6;
+       split_command=g_strsplit(command, "#", 2);
+       ar_asprintf(&feed_command, "%s\n", split_command[0]);
+       g_strfreev(split_command);
+       vte_terminal_feed_child(VTE_TERMINAL(terminal), 
+               feed_command, strlen(feed_command));
+       g_free(feed_command);
+}
+
 static gboolean
-test_special_command(struct GSH_CBData * cb)
+test_special_command(struct GSHCBData * cb)
 {
        const gchar * command = cb->data;
-       if(!strcmp(command, "Exit__"))
+       struct GSH * gsh = cb->gsh;
+
+#define MATCH(str) !strncmp(command, str, strlen(str))
+
+       if(MATCH("Exit__"))
        {
+               /* Clean up application before exiting, particularly
+                  delete terminal command script files.  */
+               $(gsh, delete);
                exit(0);
-               /* unreachable */
        }
-       else
+       else if(MATCH("TERM__"))
+               terminal_feed((gchar *)command, gsh->terminal->widget);
+       else if(MATCH("Save_As...___"))
+       {
+       }
+       else if(MATCH("Save___"))
+       {
+       }
+       else /* No special command found.  */
                return FALSE;
+       /* Special command handled.  */
+       return TRUE;
 }
 
-void
+static void
 gsh_system_cb(GtkWidget *widget, gpointer data)
 {
 #ifdef DEBUG
@@ -74,7 +102,7 @@
 
        ARWIFNP(data)
        {
-               struct GSH_CBData *cb = data;
+               struct GSHCBData *cb = data;
                if(!test_special_command(cb))
                        (void) antiright_system(cb->data);
                (void) gsh_test_exit(cb->gsh);
@@ -82,7 +110,7 @@
 }
 
 static void
-exec_and_test_print(struct GSH_CBData * cb, const gchar * input)
+exec_and_test_print(struct GSHCBData * cb, const gchar * input)
 {
        struct GSH * gsh;
 
@@ -95,17 +123,17 @@
                         (char *) input);
 }
 
-void
+static void
 gsh_entry_cb(GtkWidget *widget, gpointer data)
 {
-       struct GSH_CBData *cb;
+       struct GSHCBData *cb;
 
 #ifdef DEBUG
        ARPASSERT(widget);
        ARPASSERT(data);
 #endif /* DEBUG */
 
-       cb = (struct GSH_CBData *) data;
+       cb = (struct GSHCBData *) data;
 
        {
                GtkWidget * combo_box;
@@ -123,3 +151,19 @@
                                                   (gchar *)input);
        }
 }
+
+struct GSHCBData *
+gsh_new_GSHCBData(struct GSH * gsh, gpointer data)
+{
+       struct GSHCBData * cb;
+
+       cb = xmalloc(sizeof(struct GSHCBData));
+       cb->gsh=gsh;
+       cb->data=data;
+       cb->delete=&gsh_delete_GSHCBData;
+       cb->entry=&gsh_entry_cb;
+       cb->system=&gsh_system_cb;
+
+       return cb;
+}
+

Index: gtkshell/callbacks.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/callbacks.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- gtkshell/callbacks.h        24 Apr 2007 21:54:21 -0000      1.8
+++ gtkshell/callbacks.h        8 May 2007 20:40:07 -0000       1.9
@@ -23,22 +23,16 @@
 #ifndef GSH_CALLBACKS_H
 #define GSH_CALLBACKS_H
 
-struct GSH_CBData
+struct GSHCBData
 {
        struct GSH *gsh;
        gpointer data;
+       void (*delete)(struct GSHCBData *);
+       void (*system)(GtkWidget *, gpointer);
+       void (*entry)(GtkWidget *, gpointer);
 };
 
-struct GSH_CBData *
-gsh_new_GSH_CBData(struct GSH * gsh, gpointer data);
-
-void
-gsh_delete_GSH_CBData(struct GSH_CBData * cb);
-
-void
-gsh_system_cb(GtkWidget *widget, gpointer data);
-
-void
-gsh_entry_cb(GtkWidget *widget, gpointer data);
+struct GSHCBData *
+gsh_new_GSHCBData(struct GSH * gsh, gpointer data);
 
 #endif /* not GSH_CALLBACKS_H */

Index: gtkshell/gtkshell.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/gtkshell.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- gtkshell/gtkshell.c 6 May 2007 06:23:36 -0000       1.34
+++ gtkshell/gtkshell.c 8 May 2007 20:40:07 -0000       1.35
@@ -24,11 +24,17 @@
 #include "gtkshell.h"
 
 static void
-gsh_delete_GSH(struct GSH * gsh)
+delete_child_classes(struct GSH * gsh)
 {
        $(gsh->rows, delete);
        $(gsh->terminal, delete);
        $(gsh->update, delete);
+}
+
+static void
+gsh_delete_GSH(struct GSH * gsh)
+{
+       delete_child_classes(gsh);
        GSH_FREE_IF(gsh->geometry);
 }
 
@@ -39,27 +45,65 @@
 }
 
 static void
-gsh_setup_GSH(struct GSH * gsh)
+setup_add_methods(struct GSH * gsh)
+{
+       gsh->add.window=&gsh_GSH_new_window;
+       gsh->add.button=&gsh_add_button;
+       gsh->add.label=&gsh_add_label;
+}
+
+static void
+setup_methods(struct GSH * gsh)
 {
-       gsh->geometry = (gchar *)NULL;
-       gsh->bflags = 0;
-       gsh->update = ARNEW(gsh, GSHUpdateManager);
-       gsh->rows = ARNEW(gsh, GSHRows);
-       gsh->terminal = ARNEW(gsh, GSH_Terminal);
        gsh->delete = &gsh_delete_GSH;
        gsh->parse = &gsh_parse_arguments;
        gsh->finalize = &gsh_GSH_finalize;
        gsh->init = &gsh_setup_containers;
        gsh->manage=&gsh_manage;
-       gsh->add.window=&gsh_GSH_new_window;
-       gsh->add.button=&gsh_add_button;
-       gsh->add.label=&gsh_add_label;
-       $(gsh, add.window);
+       setup_add_methods(gsh);
+}
+
+static void
+setup_child_classes(struct GSH * gsh)
+{
+       gsh->update = ARNEW(gsh, GSHUpdateManager);
+       gsh->rows = ARNEW(gsh, GSHRows);
+       gsh->terminal = ARNEW(gsh, GSH_Terminal);
+}
+
+static void
+setup_widget_member_fields(struct GSH * gsh)
+{
        gsh->widgets.menu_bar=NULL;
        gsh->widgets.app_frame=NULL;
+}
+
+static void
+setup_editor_member_fields(struct GSH * gsh)
+{
+       gsh->editor.widget=NULL;
+       gsh->editor.filename=NULL;
+}
+
+static void
+setup_member_fields(struct GSH * gsh)
+{
+       setup_widget_member_fields(gsh);
+       setup_editor_member_fields(gsh);
+       gsh->geometry = (gchar *)NULL;
+       gsh->bflags = 0;
        gsh->icon_size=GTK_ICON_SIZE_DND;
 }
 
+static void
+gsh_setup_GSH(struct GSH * gsh)
+{
+       setup_child_classes(gsh);
+       setup_methods(gsh);
+       setup_member_fields(gsh);
+       $(gsh, add.window);
+}
+
 struct GSH *
 gsh_new_GSH()
 {

Index: gtkshell/gtkshell.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/gtkshell.h,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -b -r1.43 -r1.44
--- gtkshell/gtkshell.h 6 May 2007 06:23:36 -0000       1.43
+++ gtkshell/gtkshell.h 8 May 2007 20:40:07 -0000       1.44
@@ -55,7 +55,7 @@
        GtkIconSize icon_size;
 
        /* member data categories */
-       struct
+       struct /* widgets */
        {
                GtkWidget * window;
                GtkWidget * scrolled_window;
@@ -65,6 +65,11 @@
                GtkWidget * app_frame;
                GtkWidget * app_row;
        } widgets;
+       struct /* text editor */
+       {
+               gchar * filename;
+               GtkWidget * widget;
+       } editor;
 
        /* member classes */
        struct GSHRows * rows;

Index: gtkshell/menu.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/menu.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- gtkshell/menu.c     6 May 2007 05:00:11 -0000       1.8
+++ gtkshell/menu.c     8 May 2007 20:40:07 -0000       1.9
@@ -66,23 +66,41 @@
        gsh->rows->v=old_row;
 }
 
+#define CONT_ADD(cont, widget)\
+       gtk_container_add(GTK_CONTAINER(cont), widget)
+
+#define SHOW_CREAT(var, type, ...)\
+       gtk_widget_show(var=gtk_##type##_new(__VA_ARGS__))
+
+#define GW gsh->widgets
+
 static void
-setup_app_mode(struct GSH * gsh)
+setup_app_mode_status_bar(struct GSH * gsh)
 {
-       GtkWidget * app_row;
        GtkWidget * status_frame;
-       GtkWidget * status_bar;
 
-       gtk_widget_show(app_row = gtk_vbox_new(FALSE, 1));
-       gsh->widgets.app_row=app_row;
-       gtk_container_add(GTK_CONTAINER(app_row), gsh->widgets.menu_bar);
-       gtk_widget_show(gsh->widgets.app_frame=gtk_frame_new(NULL));
-       gtk_container_add(GTK_CONTAINER(app_row), gsh->widgets.app_frame);
-       gtk_widget_show(status_frame=gtk_frame_new(NULL));
+       SHOW_CREAT(status_frame, frame, NULL);
        gtk_frame_set_shadow_type(GTK_FRAME(status_frame), GTK_SHADOW_IN);
-       gtk_container_add(GTK_CONTAINER(app_row), status_frame);
-       gtk_widget_show(status_bar=gtk_label_new("status"));
-       gtk_container_add(GTK_CONTAINER(status_frame), status_bar);
+       CONT_ADD(GW.app_row, status_frame);
+       SHOW_CREAT(GW.status_bar, label, "status");
+       CONT_ADD(status_frame, GW.status_bar);
+}
+
+static void
+setup_app_mode_frame(struct GSH * gsh)
+{
+       SHOW_CREAT(GW.app_frame, frame, NULL);
+       CONT_ADD(GW.app_row, GW.app_frame);
+}
+
+static void
+setup_app_mode(struct GSH * gsh)
+{
+       SHOW_CREAT(GW.app_row, vbox, FALSE, 1);
+       /* Add menu bar to application column.  */
+       CONT_ADD(GW.app_row, GW.menu_bar);
+       setup_app_mode_frame(gsh);
+       setup_app_mode_status_bar(gsh);
 }
 
 static void

Index: gtkshell/terminal.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- gtkshell/terminal.c 3 May 2007 22:55:10 -0000       1.11
+++ gtkshell/terminal.c 8 May 2007 20:40:07 -0000       1.12
@@ -36,116 +36,19 @@
 }
 
 static void
-set_script_permissions(gint fd)
-{
-       /* Set the script file permissions such that only the user has read,
-        * write and execute privileges.  Check for success.  */
-       if (fchmod(fd, S_IXUSR | S_IRUSR | S_IWUSR) != 0)
-               ARERR("script file does not exist");
-}
-
-static gint
-setup_script_file(gchar **name)
-{
-       gint fd;
-
-       /* Open temporary file, store file descriptor in FD and file name in
-        * NAME.  NAME is modified in calling function.  */
-       fd = g_file_open_tmp("gshterm.XXXXXX", name, NULL);
-#ifdef DEBUG
-       /* Check for success.  */
-       ARASSERT(fd != -1);
-#endif /* DEBUG */
-
-       return fd;
-}
-
-/* This is a workaround for vte's fscking up of option arrays.  */
-/* Returned value must be freed.  */
-static gchar *
-gsh_terminal_command_script(struct GSH_Terminal * term, const gchar *command)
-{
-       gchar *script_name;
-       FILE *script;
-       gint fd;
-
-#ifdef DEBUG
-       ARBUG("gshterm_command_script()");
-#endif                         /* DEBUG */
-
-       /* No need to continue of no command has been specified.  */
-       ARPASSERT(command);
-
-       /* Create script temporary file.  */
-       fd=setup_script_file(&script_name);
-       
-       /*
-        * Do this immediately after opening in order to reduce the
-        * possiblity of script modification exploit.
-        */
-       set_script_permissions(fd);
-       
-       /* Get a file pointer associated with the file descriptor.  Check for
-        * success.  */
-       ARIFNP((script=fdopen(fd, "w")))
-               ARERR("script file could not be opened");
-
-       /* Write file to disk.  Check for success.  */
-       if(fsync(fd) == -1)
-               ARERR("cannot write script file");
-       
-       if(fprintf(script, "#!/bin/sh\nexport LINES=%d\n"
-                          "export COLUMNS=%d\n%s\n", 
-                  term->height, term->width, command) 
-          == -1)
-               ARERR("cannot write to script file");
-       fclose(script); /* Close and flush buffers.  */
-
-#ifdef DEBUG
-       /* Display script contents.  */
-       sysprintf("cat %s", script_name);
-       ARBUG("end gshterm_command_script()");
-#endif                         /* DEBUG */
-
-       /* Calling function should free SCRIPT_NAME.  */
-       return (script_name);
-}
-
-static void
 gsh_terminal_run(struct GSH_Terminal * term, const gchar * command)
 {
-       /* Get command to run.  */
-       $(term->scripts, add_as_first, 
-               gsh_terminal_command_script(term, command));
-
-       /* Run the script in the terminal->widget.  */
-       vte_terminal_fork_command(VTE_TERMINAL(term->widget),
-                                 term->scripts->argv[0], NULL, NULL, 
-                                 NULL, TRUE, TRUE, TRUE);
+       const gchar * shell = getenv("SHELL");
+       const gchar *argv[] = { shell, "-c", command, NULL };
 
-       /* SCRIPTS must be freed later, so preserve reference.  */
-}
-
-static void
-cleanup_scripts(struct GSH_Terminal * term)
-{
-       /* 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.  */
-
-       gint i;
-
-       for(i=0; i < term->scripts->argc; i++)
-               unlink(term->scripts->argv[i]);
-       $(term->scripts, delete);
+       vte_terminal_fork_command(VTE_TERMINAL(term->widget), shell, 
+               (char **)argv, NULL, NULL, TRUE, TRUE, TRUE);
 }
 
 static void
 gsh_delete_GSH_Terminal(struct GSH_Terminal * term)
 {
        GSH_FREE_IF(term->font);
-       cleanup_scripts(term);
        g_free(term);
 }
 
@@ -167,7 +70,6 @@
 {
        term->widget=NULL;
        term->font=NULL;
-       term->scripts=ARNEW(ar, ARArguments);
        term->width=80;
        term->height=24;
        term->delete=&gsh_delete_GSH_Terminal;

Index: gtkshell/terminal_struct.h
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/terminal_struct.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- gtkshell/terminal_struct.h  3 May 2007 03:42:31 -0000       1.4
+++ gtkshell/terminal_struct.h  8 May 2007 20:40:07 -0000       1.5
@@ -33,9 +33,6 @@
        GtkWidget * (*add)(struct GSH_Terminal *, const gchar *);
 };
 
-void
-gsh_GSH_Terminal(struct GSH_Terminal * term);
-
 struct GSH_Terminal *
 gsh_new_GSH_Terminal();
 

Index: gtkshell/text.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/text.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- gtkshell/text.c     3 May 2007 20:49:20 -0000       1.24
+++ gtkshell/text.c     8 May 2007 20:40:07 -0000       1.25
@@ -40,17 +40,18 @@
 static void
 setup_entry_cb(struct GSH * gsh, GtkWidget * entry, const gchar * command)
 {
+
+       struct GSHCBData * cb;
+
 #ifdef DEBUG
        /* Validate parameters.  */
        ARPASSERT(gsh);
        ARPASSERT(entry);
        ARPASSERT(command);
 #endif /* DEBUG */
-
+       cb=ARNEW(gsh, GSHCBData, gsh, (gpointer)(command ? command : "echo"));
        g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(entry))), 
-               "activate", G_CALLBACK(gsh_entry_cb), 
-               (gpointer) ARNEW(gsh, GSH_CBData, gsh,
-               (gpointer)(command ? command : "echo")));
+               "activate", G_CALLBACK(cb->entry), (gpointer)cb);
 }
 
 GtkWidget *
@@ -76,7 +77,8 @@
 {
        GtkWidget *text;
 
-       gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text=gtk_text_view_new()), 
+       gtk_text_view_set_wrap_mode(
+               GTK_TEXT_VIEW(gsh->editor.widget=text=gtk_text_view_new()), 
                GTK_WRAP_WORD);
        gsh_manage(gsh, text);
        gsh_widget_set_font(text, NULL);

Index: gtkshell/updated_label.c
===================================================================
RCS file: /sources/antiright/antiright/gtkshell/updated_label.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- gtkshell/updated_label.c    6 May 2007 05:00:11 -0000       1.17
+++ gtkshell/updated_label.c    8 May 2007 20:40:07 -0000       1.18
@@ -68,5 +68,12 @@
        ARPASSERT(command);
 #endif /* DEBUG */
        $(gsh->update, add, ARNEW(gsh, GSHUpdatedWidget, &gsh_update_label,
-               command, gsh_add_label(gsh, (char *)command)));
+               command, (GSH_FLAG(GSH_APP_MODE) && gsh->widgets.status_bar
+               && !strncmp(gtk_label_get_text(
+               GTK_LABEL(gsh->widgets.status_bar)), "status", 6))
+               ? gsh->widgets.status_bar 
+               : gsh_add_label(gsh, (char *)command)));
+       /* Prevent two updaters from being 
+          assigned to the status bar label.  */
+       gsh->widgets.status_bar=NULL;
 }




reply via email to

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