[Top][All Lists]
[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Antiright-devel] antiright ACE-desktop/guidl/IDE.gdl gtkshell/bu...,
Jeffrey Bedard <=