diff --git a/.indent.pro b/.indent.pro new file mode 100644 index 0000000..39ed16d --- /dev/null +++ b/.indent.pro @@ -0,0 +1 @@ +-i3 -bl -bad -nbap -sob -ncdb -di20 -nbc -lp -nce -npcs -sc -ncs -l80 diff --git a/ipc.c b/ipc.c index 8ef95e2..65ac85f 100644 --- a/ipc.c +++ b/ipc.c @@ -9,337 +9,365 @@ #include "ipc.h" #include "viewer.h" -typedef struct _client { - gchar *name; - Window win; - gchar *msg; - gchar *clientname; - gchar *version; - gchar *author; - gchar *email; - gchar *web; - gchar *address; - gchar *info; +typedef struct _client +{ + gchar *name; + Window win; + gchar *msg; + gchar *clientname; + gchar *version; + gchar *author; + gchar *email; + gchar *web; + gchar *address; + gchar *info; } Client; -Client *e_client = NULL; +Client *e_client = NULL; -static Window comms_win = 0; -static Window my_win = 0; -static GdkWindow *gdkwin = NULL; -static GdkWindow *gdkwin2 = NULL; -static void (*msg_receive_callback) (gchar * msg) = NULL; +static Window comms_win = 0; +static Window my_win = 0; +static GdkWindow *gdkwin = NULL; +static GdkWindow *gdkwin2 = NULL; +static void (*msg_receive_callback) (gchar * msg) = NULL; -static void CommsSetup(void); +static void CommsSetup(void); static GdkFilterReturn CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event, - gpointer data); -static Window CommsFindCommsWindow(void); -static gchar *CommsGet(Client ** c, XEvent * ev); -static Client *MakeClient(Window win); -static void ListFreeClient(void *ptr); -extern gchar in_init; -extern gint gdk_error_warnings; + gpointer data); +static Window CommsFindCommsWindow(void); +static gchar *CommsGet(Client ** c, XEvent * ev); +static Client *MakeClient(Window win); +static void ListFreeClient(void *ptr); +extern gchar in_init; +extern gint gdk_error_warnings; - -gint CommsInit(void (*msg_receive_func) (gchar * msg)) +gint +CommsInit(void (*msg_receive_func) (gchar * msg)) { - Window win; - gchar st[32]; - Client *cl; + Window win; + gchar st[32]; + Client *cl; - CommsSetup(); - comms_win = win = CommsFindCommsWindow(); - cl = MakeClient(win); - g_snprintf(st, sizeof(st), "%8x", (int) win); - cl->name = g_strdup(st); - e_client = cl; - gdkwin = gdk_window_foreign_new(win); - gdk_window_add_filter(gdkwin, CommsFilter, NULL); - gdkwin2 = gdk_window_foreign_new(my_win); - gdk_window_add_filter(gdkwin2, CommsFilter, NULL); - XSelectInput(GDK_DISPLAY(), win, - StructureNotifyMask | SubstructureNotifyMask); - msg_receive_callback = msg_receive_func; - return 1; + CommsSetup(); + comms_win = win = CommsFindCommsWindow(); + cl = MakeClient(win); + g_snprintf(st, sizeof(st), "%8x", (int)win); + cl->name = g_strdup(st); + e_client = cl; + gdkwin = gdk_window_foreign_new(win); + gdk_window_add_filter(gdkwin, CommsFilter, NULL); + gdkwin2 = gdk_window_foreign_new(my_win); + gdk_window_add_filter(gdkwin2, CommsFilter, NULL); + XSelectInput(GDK_DISPLAY(), win, + StructureNotifyMask | SubstructureNotifyMask); + msg_receive_callback = msg_receive_func; + return 1; } -void CommsSend(gchar * s) +void +CommsSend(gchar * s) { - gchar ss[21]; - int i, j, k, len; - XEvent ev; - static Atom a = 0; - Client *c; + gchar ss[21]; + int i, j, k, len; + XEvent ev; + static Atom a = 0; + Client *c; - c = e_client; - if ((!s) || (!c)) - return; - len = strlen(s); - if (!a) - a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True); - ev.xclient.type = ClientMessage; - ev.xclient.serial = 0; - ev.xclient.send_event = True; - ev.xclient.window = c->win; - ev.xclient.message_type = a; - ev.xclient.format = 8; + c = e_client; + if ((!s) || (!c)) + return; + len = strlen(s); + if (!a) + a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True); + ev.xclient.type = ClientMessage; + ev.xclient.serial = 0; + ev.xclient.send_event = True; + ev.xclient.window = c->win; + ev.xclient.message_type = a; + ev.xclient.format = 8; - for (i = 0; i < len + 1; i += 12) { - g_snprintf(ss, sizeof(ss), "%8x", (int) my_win); - for (j = 0; j < 12; j++) { - ss[8 + j] = s[i + j]; - if (!s[i + j]) - j = 12; - } - ss[20] = 0; - for (k = 0; k < 20; k++) - ev.xclient.data.b[k] = ss[k]; - XSendEvent(GDK_DISPLAY(), c->win, False, 0, (XEvent *) & ev); - } - return; + for (i = 0; i < len + 1; i += 12) + { + g_snprintf(ss, sizeof(ss), "%8x", (int)my_win); + for (j = 0; j < 12; j++) + { + ss[8 + j] = s[i + j]; + if (!s[i + j]) + j = 12; + } + ss[20] = 0; + for (k = 0; k < 20; k++) + ev.xclient.data.b[k] = ss[k]; + XSendEvent(GDK_DISPLAY(), c->win, False, 0, (XEvent *) & ev); + } + return; } -static GdkFilterReturn +static GdkFilterReturn CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event, gpointer data) { - XEvent *xevent; - gchar *msg = NULL; - Client *c = NULL; - static Atom a; + XEvent *xevent; + gchar *msg = NULL; + Client *c = NULL; + static Atom a; - data = NULL; + data = NULL; - if (!a) - a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True); - xevent = (XEvent *) gdk_xevent; - switch (xevent->type) { - case DestroyNotify: - if (xevent->xdestroywindow.window == comms_win) { - gint i; + if (!a) + a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True); + xevent = (XEvent *) gdk_xevent; + switch (xevent->type) + { + case DestroyNotify: + if (xevent->xdestroywindow.window == comms_win) + { + gint i; - comms_win = 0; - if (!in_init) { - for (i = 0; ((i < 20) && (!comms_win)); i++) { - if ((comms_win = CommsFindCommsWindow())) { - gchar st[256]; + comms_win = 0; + if (!in_init) + { + for (i = 0; ((i < 20) && (!comms_win)); i++) + { + if ((comms_win = CommsFindCommsWindow())) + { + gchar st[256]; - ListFreeClient(e_client); - e_client = MakeClient(comms_win); - g_snprintf(st, sizeof(st), "%8x", (int) comms_win); - e_client->name = g_strdup(st); - if (gdkwin) - gdk_window_unref(gdkwin); - gdkwin = gdk_window_foreign_new(comms_win); - gdk_window_add_filter(gdkwin, CommsFilter, NULL); - XSelectInput(GDK_DISPLAY(), comms_win, - StructureNotifyMask | - SubstructureNotifyMask); - } - sleep(1); - } - } - if (!comms_win) { - GtkWidget *win, *label, *align, *frame, *button, *vbox; + ListFreeClient(e_client); + e_client = MakeClient(comms_win); + g_snprintf(st, sizeof(st), "%8x", (int)comms_win); + e_client->name = g_strdup(st); + if (gdkwin) + gdk_window_unref(gdkwin); + gdkwin = gdk_window_foreign_new(comms_win); + gdk_window_add_filter(gdkwin, CommsFilter, NULL); + XSelectInput(GDK_DISPLAY(), comms_win, + StructureNotifyMask | + SubstructureNotifyMask); + } + sleep(1); + } + } + if (!comms_win) + { + GtkWidget *win, *label, *align, *frame, *button, + *vbox; #ifdef ENABLE_GTK2 - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); -#else - win = gtk_window_new(GTK_WINDOW_DIALOG); -#endif - gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1); - gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); - align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); - gtk_container_set_border_width(GTK_CONTAINER(align), 32); - vbox = gtk_vbox_new(FALSE, 5); - button = gtk_button_new_with_label("Bye bye!"); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(on_exit_application), NULL); - label = gtk_label_new("EEEEEEEEEEEEEEK! HELP! HEEEEEEEEEELP!\n" - "\n" - "Enlightenemnt dissapeared on me!\n" - "\n" - "Someone help me - I'm drowning - drowning\n" - "\n" - "That's it. I'm out of here. I can't deal with the\n" - "idea of losing Enlightenment. I'm going to jump and\n" - "don't try and stop me.\n" "\n"); - gtk_container_add(GTK_CONTAINER(win), frame); - gtk_container_add(GTK_CONTAINER(frame), align); - gtk_container_add(GTK_CONTAINER(align), vbox); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); - gtk_widget_show_all(win); - gtk_main(); - exit(1); - } - } else { - gdk_window_destroy_notify(((GdkEventAny *) event)->window); - } - return GDK_FILTER_REMOVE; - break; - case ClientMessage: - if (xevent->xclient.message_type != a) - return GDK_FILTER_CONTINUE; - msg = CommsGet(&c, xevent); - if (msg) { - if (msg_receive_callback) - (*msg_receive_callback) (msg); - g_free(msg); - return GDK_FILTER_REMOVE; - } - break; - default: - return GDK_FILTER_REMOVE; - } + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); +#else + win = gtk_window_new(GTK_WINDOW_DIALOG); +#endif + gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1); + gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); + align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); + gtk_container_set_border_width(GTK_CONTAINER(align), 32); + vbox = gtk_vbox_new(FALSE, 5); + button = gtk_button_new_with_label("Bye bye!"); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_exit_application), + NULL); + label = + gtk_label_new("EEEEEEEEEEEEEEK! HELP! HEEEEEEEEEELP!\n" + "\n" "Enlightenemnt dissapeared on me!\n" + "\n" + "Someone help me - I'm drowning - drowning\n" + "\n" + "That's it. I'm out of here. I can't deal with the\n" + "idea of losing Enlightenment. I'm going to jump and\n" + "don't try and stop me.\n" "\n"); + gtk_container_add(GTK_CONTAINER(win), frame); + gtk_container_add(GTK_CONTAINER(frame), align); + gtk_container_add(GTK_CONTAINER(align), vbox); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); + gtk_widget_show_all(win); + gtk_main(); + exit(1); + } + } + else + { + gdk_window_destroy_notify(((GdkEventAny *) event)->window); + } return GDK_FILTER_REMOVE; + break; + case ClientMessage: + if (xevent->xclient.message_type != a) + return GDK_FILTER_CONTINUE; + msg = CommsGet(&c, xevent); + if (msg) + { + if (msg_receive_callback) + (*msg_receive_callback) (msg); + g_free(msg); + return GDK_FILTER_REMOVE; + } + break; + default: + return GDK_FILTER_REMOVE; + } + return GDK_FILTER_REMOVE; } -static void CommsSetup(void) +static void +CommsSetup(void) { - my_win = XCreateSimpleWindow(GDK_DISPLAY(), GDK_ROOT_WINDOW(), - -100, -100, 5, 5, 0, 0, 0); + my_win = XCreateSimpleWindow(GDK_DISPLAY(), GDK_ROOT_WINDOW(), + -100, -100, 5, 5, 0, 0, 0); } -static Window CommsFindCommsWindow(void) +static Window +CommsFindCommsWindow(void) { - unsigned char *s; - Atom a, ar; - unsigned long num, after; - int format; - Window win = 0; - Window rt; - int dint; - unsigned int duint; + unsigned char *s; + Atom a, ar; + unsigned long num, after; + int format; + Window win = 0; + Window rt; + int dint; + unsigned int duint; - a = XInternAtom(GDK_DISPLAY(), "ENLIGHTENMENT_COMMS", True); - if (a != None) { - s = NULL; - XGetWindowProperty(GDK_DISPLAY(), GDK_ROOT_WINDOW(), a, 0, 14, False, - AnyPropertyType, &ar, &format, &num, &after, &s); - if (s) { - sscanf((char *) s, "%*s %x", (unsigned int *) &win); - XFree(s); - } - if (win) { - gint p; + a = XInternAtom(GDK_DISPLAY(), "ENLIGHTENMENT_COMMS", True); + if (a != None) + { + s = NULL; + XGetWindowProperty(GDK_DISPLAY(), GDK_ROOT_WINDOW(), a, 0, 14, False, + AnyPropertyType, &ar, &format, &num, &after, &s); + if (s) + { + sscanf((char *)s, "%*s %x", (unsigned int *)&win); + XFree(s); + } + if (win) + { + gint p; - p = gdk_error_warnings; - gdk_error_warnings = 0; - if (!XGetGeometry(GDK_DISPLAY(), win, &rt, &dint, &dint, - &duint, &duint, &duint, &duint)) - win = 0; - gdk_flush(); - gdk_error_warnings = p; - s = NULL; - if (win) { - XGetWindowProperty(GDK_DISPLAY(), win, a, 0, 14, False, - AnyPropertyType, &ar, &format, &num, &after, - &s); - if (s) - XFree(s); - else - win = 0; - } - } - } - return win; + p = gdk_error_warnings; + gdk_error_warnings = 0; + if (!XGetGeometry(GDK_DISPLAY(), win, &rt, &dint, &dint, + &duint, &duint, &duint, &duint)) + win = 0; + gdk_flush(); + gdk_error_warnings = p; + s = NULL; + if (win) + { + XGetWindowProperty(GDK_DISPLAY(), win, a, 0, 14, False, + AnyPropertyType, &ar, &format, &num, + &after, &s); + if (s) + XFree(s); + else + win = 0; + } + } + } + return win; } -static gchar *CommsGet(Client ** c, XEvent * ev) +static gchar * +CommsGet(Client ** c, XEvent * ev) { - gchar s[13], s2[9], *msg; - int i; - Window win; - Client *cl; - static Atom a; + gchar s[13], s2[9], *msg; + int i; + Window win; + Client *cl; + static Atom a; - if (!a) - a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True); - if ((!ev) || (!c)) - return (NULL); - if (ev->type != ClientMessage) - return (NULL); - if (ev->xclient.message_type != a) - return (NULL); - s[12] = 0; - s2[8] = 0; - msg = NULL; - for (i = 0; i < 8; i++) - s2[i] = ev->xclient.data.b[i]; - for (i = 0; i < 12; i++) - s[i] = ev->xclient.data.b[i + 8]; - sscanf(s2, "%x", (int *) &win); - cl = e_client; - if (!cl) - return (NULL); - if (cl->msg) { - /* append text to end of msg */ - cl->msg = g_realloc(cl->msg, strlen(cl->msg) + strlen(s) + 1); - if (!cl->msg) - return (NULL); - strcat(cl->msg, s); - } else { - /* new msg */ - cl->msg = g_malloc(strlen(s) + 1); - if (!cl->msg) - return (NULL); - strcpy(cl->msg, s); - } - if (strlen(s) < 12) { - msg = cl->msg; - cl->msg = NULL; - *c = cl; - } - return (msg); + if (!a) + a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True); + if ((!ev) || (!c)) + return (NULL); + if (ev->type != ClientMessage) + return (NULL); + if (ev->xclient.message_type != a) + return (NULL); + s[12] = 0; + s2[8] = 0; + msg = NULL; + for (i = 0; i < 8; i++) + s2[i] = ev->xclient.data.b[i]; + for (i = 0; i < 12; i++) + s[i] = ev->xclient.data.b[i + 8]; + sscanf(s2, "%x", (int *)&win); + cl = e_client; + if (!cl) + return (NULL); + if (cl->msg) + { + /* append text to end of msg */ + cl->msg = g_realloc(cl->msg, strlen(cl->msg) + strlen(s) + 1); + if (!cl->msg) + return (NULL); + strcat(cl->msg, s); + } + else + { + /* new msg */ + cl->msg = g_malloc(strlen(s) + 1); + if (!cl->msg) + return (NULL); + strcpy(cl->msg, s); + } + if (strlen(s) < 12) + { + msg = cl->msg; + cl->msg = NULL; + *c = cl; + } + return (msg); } -static Client *MakeClient(Window win) +static Client * +MakeClient(Window win) { - Client *c; + Client *c; - c = g_malloc(sizeof(Client)); - if (!c) - return (NULL); - c->name = NULL; - c->win = win; - c->msg = NULL; - c->clientname = NULL; - c->version = NULL; - c->author = NULL; - c->email = NULL; - c->web = NULL; - c->address = NULL; - c->info = NULL; - return (c); + c = g_malloc(sizeof(Client)); + if (!c) + return (NULL); + c->name = NULL; + c->win = win; + c->msg = NULL; + c->clientname = NULL; + c->version = NULL; + c->author = NULL; + c->email = NULL; + c->web = NULL; + c->address = NULL; + c->info = NULL; + return (c); } -static void ListFreeClient(void *ptr) +static void +ListFreeClient(void *ptr) { - Client *c; + Client *c; - c = (Client *) ptr; - if (!c) - return; - if (c->name) - g_free(c->name); - if (c->msg) - g_free(c->msg); - if (c->clientname) - g_free(c->clientname); - if (c->version) - g_free(c->version); - if (c->author) - g_free(c->author); - if (c->email) - g_free(c->email); - if (c->web) - g_free(c->web); - if (c->address) - g_free(c->address); - if (c->info) - g_free(c->info); - g_free(c); - return; + c = (Client *) ptr; + if (!c) + return; + if (c->name) + g_free(c->name); + if (c->msg) + g_free(c->msg); + if (c->clientname) + g_free(c->clientname); + if (c->version) + g_free(c->version); + if (c->author) + g_free(c->author); + if (c->email) + g_free(c->email); + if (c->web) + g_free(c->web); + if (c->address) + g_free(c->address); + if (c->info) + g_free(c->info); + g_free(c); + return; } diff --git a/ipc.h b/ipc.h index 4ad6abd..2a1718a 100644 --- a/ipc.h +++ b/ipc.h @@ -1,5 +1,5 @@ -gint CommsInit(void (*msg_receive_func) (gchar * msg)); -void CommsSend(gchar * s); +gint CommsInit(void (*msg_receive_func) (gchar * msg)); +void CommsSend(gchar * s); -gchar in_init; -gint gdk_error_warnings; +gchar in_init; +gint gdk_error_warnings; diff --git a/menus.c b/menus.c index 96e2f6d..d9d57eb 100644 --- a/menus.c +++ b/menus.c @@ -13,64 +13,71 @@ #include "menus.h" #include "viewer.h" - -GtkWidget * -CreateBarSubMenu(GtkWidget *menu, char *szName) { - GtkWidget *menuitem; - GtkWidget *submenu; - - menuitem = gtk_menu_item_new_with_label(szName); - gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem); - gtk_widget_show(menuitem); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),submenu); - - return submenu; - -} - -GtkWidget * -CreateRightAlignBarSubMenu(GtkWidget *menu, char *szName) { - GtkWidget *menuitem; - GtkWidget *submenu; - - menuitem = gtk_menu_item_new_with_label(szName); - gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem)); - gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem); - gtk_widget_show(menuitem); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),submenu); - - return submenu; - -} - -GtkWidget * -CreateMenuItem(GtkWidget *menu, char *szName, char *szAccel, char *szTip, - GtkSignalFunc func, gpointer data) +GtkWidget * +CreateBarSubMenu(GtkWidget * menu, char *szName) { - GtkWidget *menuitem; + GtkWidget *menuitem; + GtkWidget *submenu; - if(szName && strlen (szName)) { - menuitem = gtk_menu_item_new_with_label(szName); - gtk_signal_connect(GTK_OBJECT(menuitem),"activate", - GTK_SIGNAL_FUNC(func),data); - } else { - menuitem = gtk_menu_item_new(); - } + menuitem = gtk_menu_item_new_with_label(szName); + gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem); + gtk_widget_show(menuitem); + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); - gtk_menu_append(GTK_MENU(menu),menuitem); - gtk_widget_show(menuitem); - - if(szAccel && szAccel[0] == '^') { - gtk_widget_add_accelerator(menuitem,"activate",accel_group,szAccel[1], - GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE); - } - - if(szTip && strlen(szTip)) { - gtk_tooltips_set_tip(tooltips,menuitem,szTip,NULL); - } - - return menuitem; + return submenu; + +} + +GtkWidget * +CreateRightAlignBarSubMenu(GtkWidget * menu, char *szName) +{ + GtkWidget *menuitem; + GtkWidget *submenu; + + menuitem = gtk_menu_item_new_with_label(szName); + gtk_menu_item_right_justify(GTK_MENU_ITEM(menuitem)); + gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem); + gtk_widget_show(menuitem); + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); + + return submenu; + +} + +GtkWidget * +CreateMenuItem(GtkWidget * menu, char *szName, char *szAccel, char *szTip, + GtkSignalFunc func, gpointer data) +{ + GtkWidget *menuitem; + + if (szName && strlen(szName)) + { + menuitem = gtk_menu_item_new_with_label(szName); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(func), data); + } + else + { + menuitem = gtk_menu_item_new(); + } + + gtk_menu_append(GTK_MENU(menu), menuitem); + gtk_widget_show(menuitem); + + if (szAccel && szAccel[0] == '^') + { + gtk_widget_add_accelerator(menuitem, "activate", accel_group, + szAccel[1], GDK_CONTROL_MASK, + GTK_ACCEL_VISIBLE); + } + + if (szTip && strlen(szTip)) + { + gtk_tooltips_set_tip(tooltips, menuitem, szTip, NULL); + } + + return menuitem; } diff --git a/menus.h b/menus.h index a41912c..d84849b 100644 --- a/menus.h +++ b/menus.h @@ -1,5 +1,5 @@ -GtkWidget *CreateBarSubMenu(GtkWidget *menu, char *szName); -GtkWidget *CreateRightAlignBarSubMenu(GtkWidget *menu, char *szName); -GtkWidget * CreateMenuItem(GtkWidget *menu, char *szName, char *szAccel, - char *szTip, GtkSignalFunc func, gpointer data); - +GtkWidget *CreateBarSubMenu(GtkWidget * menu, char *szName); +GtkWidget *CreateRightAlignBarSubMenu(GtkWidget * menu, char *szName); +GtkWidget *CreateMenuItem(GtkWidget * menu, char *szName, + char *szAccel, char *szTip, + GtkSignalFunc func, gpointer data); diff --git a/viewer.c b/viewer.c index 76e12f1..aa1d116 100644 --- a/viewer.c +++ b/viewer.c @@ -13,454 +13,494 @@ extern GtkTooltips *tooltips; extern GtkAccelGroup *accel_group; -GtkWidget *clist; -GtkWidget *act_key; -GtkWidget *act_params; -GtkWidget *act_mod; -GtkWidget *act_clist; +GtkWidget *clist; +GtkWidget *act_key; +GtkWidget *act_params; +GtkWidget *act_mod; +GtkWidget *act_clist; -static void receive_ipc_msg(gchar * msg); -static gchar *wait_for_ipc_msg(void); +static void receive_ipc_msg(gchar * msg); +static gchar *wait_for_ipc_msg(void); -gchar *e_ipc_msg = NULL; -GList *keys = NULL; -char dont_update=0; -int last_row=0; -int real_rows=0; +gchar *e_ipc_msg = NULL; +GList *keys = NULL; +char dont_update = 0; +int last_row = 0; +int real_rows = 0; - -typedef struct _actionopt { - gchar *text; - gint id; - gchar param_tpe; - gchar *params; +typedef struct _actionopt +{ + gchar *text; + gint id; + gchar param_tpe; + gchar *params; } ActionOpt; -gchar *mod_str[] = { - "", - "CTRL", - "ALT", - "SHIFT", - "CTRL+ALT", - "CTRL+SHIFT", - "ALT+SHIFT", - "CTRL+ALT+SHIFT", - "WIN", - "MOD3", - "MOD4", - "MOD5", - "WIN+SHIFT", - "WIN+CTRL", - "WIN+ALT", - "MOD4+SHIFT", - "MOD4+CTRL", - "MOD4+ALT", - "MOD4+CTRL+SHIFT", - "MOD5+SHIFT", - "MOD5+CTRL" +gchar *mod_str[] = { + "", + "CTRL", + "ALT", + "SHIFT", + "CTRL+ALT", + "CTRL+SHIFT", + "ALT+SHIFT", + "CTRL+ALT+SHIFT", + "WIN", + "MOD3", + "MOD4", + "MOD5", + "WIN+SHIFT", + "WIN+CTRL", + "WIN+ALT", + "MOD4+SHIFT", + "MOD4+CTRL", + "MOD4+ALT", + "MOD4+CTRL+SHIFT", + "MOD5+SHIFT", + "MOD5+CTRL" }; +/* *INDENT-OFF* */ static ActionOpt actions[] = { - {"Run command", 1, 1, NULL}, + {"Run command", 1, 1, NULL}, - {"Restart Enlightenment", 7, 0, "restart"}, - {"Exit Enlightenment", 7, 0, NULL}, + {"Restart Enlightenment", 7, 0, "restart"}, + {"Exit Enlightenment", 7, 0, NULL}, - {"Goto Next Desktop", 15, 0, NULL}, - {"Goto Previous Deskop", 16, 0, NULL}, - {"Goto Desktop", 42, 2, NULL}, - {"Raise Desktop", 17, 0, NULL}, - {"Lower Desktop", 18, 0, NULL}, - {"Reset Desktop In Place", 21, 0, NULL}, + {"Goto Next Desktop", 15, 0, NULL}, + {"Goto Previous Deskop", 16, 0, NULL}, + {"Goto Desktop", 42, 2, NULL}, + {"Raise Desktop", 17, 0, NULL}, + {"Lower Desktop", 18, 0, NULL}, + {"Reset Desktop In Place", 21, 0, NULL}, - {"Toggle Deskrays", 43, 0, NULL}, + {"Toggle Deskrays", 43, 0, NULL}, - {"Cleanup Windows", 8, 0, NULL}, - {"Scroll Windows to left", 48, 0, "-16 0"}, - {"Scroll Windows to right", 48, 0, "16 0"}, - {"Scroll Windows up", 48, 0, "0 -16"}, - {"Scroll Windows down", 48, 0, "0 16"}, - {"Scroll Windows by [X Y] pixels", 48, 3, NULL}, + {"Cleanup Windows", 8, 0, NULL}, - {"Move mouse pointer to left", 66, 0, "-1 0"}, - {"Move mouse pointer to right", 66, 0, "1 0"}, - {"Move mouse pointer up", 66, 0, "0 -1"}, - {"Move mouse pointer down", 66, 0, "0 1"}, - {"Move mouse pointer by [X Y]", 66, 3, NULL}, + {"Scroll Windows to left", 48, 0, "-16 0"}, + {"Scroll Windows to right", 48, 0, "16 0"}, + {"Scroll Windows up", 48, 0, "0 -16"}, + {"Scroll Windows down", 48, 0, "0 16"}, + {"Scroll Windows by [X Y] pixels", 48, 3, NULL}, - {"Goto Desktop area [X Y]", 62, 3, NULL}, - {"Move to Desktop area on the left", 63, 0, "-1 0"}, - {"Move to Desktop area on the right", 63, 0, "1 0"}, - {"Move to Desktop area above", 63, 0, "0 -1"}, - {"Move to Desktop area below", 63, 0, "0 1"}, + {"Move mouse pointer to left", 66, 0, "-1 0"}, + {"Move mouse pointer to right", 66, 0, "1 0"}, + {"Move mouse pointer up", 66, 0, "0 -1"}, + {"Move mouse pointer down", 66, 0, "0 1"}, + {"Move mouse pointer by [X Y]", 66, 3, NULL}, - {"Raise Window", 5, 0, NULL}, - {"Lower Window", 6, 0, NULL}, - {"Close Window", 13, 0, NULL}, - {"Annihilate Window", 14, 0, NULL}, - {"Stick / Unstick Window", 20, 0, NULL}, - {"Iconify Window", 46, 0, NULL}, - {"Shade / Unshade Window", 49, 0, NULL}, - {"Maximise Height of Window", 50, 0, "conservative"}, - {"Maximise Height of Window to whole screen", 50, 0, NULL}, - {"Maximise Height of Window to available space", 50, 0, "available"}, - {"Maximise Width of Window", 51, 0, "conservative"}, - {"Maximise Width of Window to whole screen", 51, 0, NULL}, - {"Maximise Width of Window to available space", 51, 0, "available"}, - {"Maximise Size of Window", 52, 0, "conservative"}, - {"Maximise Size of Window to whole screen", 52, 0, NULL}, - {"Maximise Size of Window to available space", 52, 0, "available"}, - {"Send window to next desktop", 53, 0, NULL}, - {"Send window to previous desktop", 54, 0, NULL}, - {"Switch focus to next window", 58, 0, NULL}, - {"Switch focus to previous window", 59, 0, NULL}, - {"Glue / Unglue Window to Desktop screen", 64, 0, NULL}, - {"Set Window layer to On Top", 65, 0, "20"}, - {"Set Window layer to Above", 65, 0, "6"}, - {"Set Window layer to Normal", 65, 0, "4"}, - {"Set Window layer to Below", 65, 0, "2"}, - {"Set Window layer", 65, 2, NULL}, - {"Move Window to area on left", 0, 0, "-1 0"}, - {"Move Window to area on right", 0, 0, "1 0"}, - {"Move Window to area above", 0, 0, "0 -1"}, - {"Move Window to area below", 0, 0, "0 1"}, - {"Move Window by area [X Y]", 0, 3, NULL}, + {"Goto Desktop area [X Y]", 62, 3, NULL}, + {"Move to Desktop area on the left", 63, 0, "-1 0"}, + {"Move to Desktop area on the right", 63, 0, "1 0"}, + {"Move to Desktop area above", 63, 0, "0 -1"}, + {"Move to Desktop area below", 63, 0, "0 1"}, - {"Set Window border style to the Default", 69, 0, "DEFAULT"}, - {"Set Window border style to the Borderless", 69, 0, "BORDERLESS"}, + {"Raise Window", 5, 0, NULL}, + {"Lower Window", 6, 0, NULL}, + {"Close Window", 13, 0, NULL}, + {"Annihilate Window", 14, 0, NULL}, + {"Stick / Unstick Window", 20, 0, NULL}, + {"Iconify Window", 46, 0, NULL}, + {"Shade / Unshade Window", 49, 0, NULL}, + {"Maximise Height of Window", 50, 0, "conservative"}, + {"Maximise Height of Window to whole screen", 50, 0, NULL}, + {"Maximise Height of Window to available space", 50, 0, "available"}, + {"Maximise Width of Window", 51, 0, "conservative"}, + {"Maximise Width of Window to whole screen", 51, 0, NULL}, + {"Maximise Width of Window to available space", 51, 0, "available"}, + {"Maximise Size of Window", 52, 0, "conservative"}, + {"Maximise Size of Window to whole screen", 52, 0, NULL}, + {"Maximise Size of Window to available space", 52, 0, "available"}, + {"Send window to next desktop", 53, 0, NULL}, + {"Send window to previous desktop", 54, 0, NULL}, + {"Switch focus to next window", 58, 0, NULL}, + {"Switch focus to previous window", 59, 0, NULL}, + {"Glue / Unglue Window to Desktop screen", 64, 0, NULL}, + {"Set Window layer to On Top", 65, 0, "20"}, + {"Set Window layer to Above", 65, 0, "6"}, + {"Set Window layer to Normal", 65, 0, "4"}, + {"Set Window layer to Below", 65, 0, "2"}, + {"Set Window layer", 65, 2, NULL}, + {"Move Window to area on left", 0, 0, "-1 0"}, + {"Move Window to area on right", 0, 0, "1 0"}, + {"Move Window to area above", 0, 0, "0 -1"}, + {"Move Window to area below", 0, 0, "0 1"}, + {"Move Window by area [X Y]", 0, 3, NULL}, - {"Forget everything about Window", 55, 0, "none"}, - {"Remember all Window settings", 55, 0, NULL}, - {"Remember Window Border", 55, 0, "border"}, - {"Remember Window Desktop", 55, 0, "desktop"}, - {"Remember Window Desktop Area", 55, 0, "area"}, - {"Remember Window Size", 55, 0, "size"}, - {"Remember Window Location", 55, 0, "location"}, - {"Remember Window Layer", 55, 0, "layer"}, - {"Remember Window Stickyness", 55, 0, "sticky"}, - {"Remember Window Shadedness", 55, 0, "shade"}, + {"Set Window border style to the Default", 69, 0, "DEFAULT"}, + {"Set Window border style to the Borderless", 69, 0, "BORDERLESS"}, - {"Show Root Menu", 9, 0, "ROOT_2"}, - {"Show Winops Menu", 9, 0, "WINOPS_MENU"}, - {"Show Named Menu", 9, 1, NULL}, + {"Forget everything about Window", 55, 0, "none"}, + {"Remember all Window settings", 55, 0, NULL}, + {"Remember Window Border", 55, 0, "border"}, + {"Remember Window Desktop", 55, 0, "desktop"}, + {"Remember Window Desktop Area", 55, 0, "area"}, + {"Remember Window Size", 55, 0, "size"}, + {"Remember Window Location", 55, 0, "location"}, + {"Remember Window Layer", 55, 0, "layer"}, + {"Remember Window Stickyness", 55, 0, "sticky"}, + {"Remember Window Shadedness", 55, 0, "shade"}, - {"Goto Linear Area", 70, 2, NULL}, - {"Previous Linear Area", 71, 0, "-1"}, - {"Next Linear Area", 71, 0, "1"}, - {NULL, 0, 0, NULL} + {"Show Root Menu", 9, 0, "ROOT_2"}, + {"Show Winops Menu", 9, 0, "WINOPS_MENU"}, + {"Show Named Menu", 9, 1, NULL}, + + {"Goto Linear Area", 70, 2, NULL}, + {"Previous Linear Area", 71, 0, "-1"}, + {"Next Linear Area", 71, 0, "1"}, + {NULL, 0, 0, NULL} }; - +/* *INDENT-ON* */ void e_cb_key_change(GtkWidget * widget, gpointer data) { - GtkWidget *win, *label, *frame, *align; + GtkWidget *win, *label, *frame, *align; - if(data) - widget = NULL; + if (data) + widget = NULL; - win = gtk_window_new(GTK_WINDOW_POPUP); - gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1); - gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_MOUSE); - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); - align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); - gtk_container_set_border_width(GTK_CONTAINER(align), 32); - label = gtk_label_new("Please press the key on the keyboard\n" - "you wish to modify this keyboard-shortcut\n" - "to use from now on."); - gtk_container_add(GTK_CONTAINER(win), frame); - gtk_container_add(GTK_CONTAINER(frame), align); - gtk_container_add(GTK_CONTAINER(align), label); - gtk_widget_show_all(win); - while (gtk_events_pending()) - gtk_main_iteration(); - gdk_flush(); - while (gtk_events_pending()) - gtk_main_iteration(); + win = gtk_window_new(GTK_WINDOW_POPUP); + gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1); + gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_MOUSE); + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); + align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); + gtk_container_set_border_width(GTK_CONTAINER(align), 32); + label = gtk_label_new("Please press the key on the keyboard\n" + "you wish to modify this keyboard-shortcut\n" + "to use from now on."); + gtk_container_add(GTK_CONTAINER(win), frame); + gtk_container_add(GTK_CONTAINER(frame), align); + gtk_container_add(GTK_CONTAINER(align), label); + gtk_widget_show_all(win); + while (gtk_events_pending()) + gtk_main_iteration(); + gdk_flush(); + while (gtk_events_pending()) + gtk_main_iteration(); - { - char *key; - XEvent ev; + { + char *key; + XEvent ev; - gdk_window_set_events(win->window, GDK_KEY_PRESS_MASK); - XSetInputFocus(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(win->window), - RevertToPointerRoot, CurrentTime); - gdk_keyboard_grab(win->window, TRUE, CurrentTime); - XWindowEvent(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(win->window), - KeyPressMask, &ev); + gdk_window_set_events(win->window, GDK_KEY_PRESS_MASK); + XSetInputFocus(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(win->window), + RevertToPointerRoot, CurrentTime); + gdk_keyboard_grab(win->window, TRUE, CurrentTime); + XWindowEvent(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(win->window), + KeyPressMask, &ev); #ifdef ENABLE_GTK2 - gdk_keyboard_ungrab(GDK_CURRENT_TIME); -#else - gdk_keyboard_ungrab(gdk_time_get()); -#endif - key = XKeysymToString(XKeycodeToKeysym(GDK_DISPLAY(), - ev.xkey.keycode, 0)); - gtk_entry_set_text(GTK_ENTRY(act_key),key); - gtk_clist_set_text(GTK_CLIST(clist),last_row,1,key); - } + gdk_keyboard_ungrab(GDK_CURRENT_TIME); +#else + gdk_keyboard_ungrab(gdk_time_get()); +#endif + key = XKeysymToString(XKeycodeToKeysym(GDK_DISPLAY(), + ev.xkey.keycode, 0)); + gtk_entry_set_text(GTK_ENTRY(act_key), key); + gtk_clist_set_text(GTK_CLIST(clist), last_row, 1, key); + } - gtk_widget_destroy(win); + gtk_widget_destroy(win); } - void e_cb_modifier(GtkWidget * widget, gpointer data) { - gint value; + gint value; - widget = NULL; - value = (gint) data; - gtk_clist_set_text(GTK_CLIST(clist),last_row,0,mod_str[value]); + widget = NULL; + value = (gint) data; + gtk_clist_set_text(GTK_CLIST(clist), last_row, 0, mod_str[value]); - return; + return; } -static gchar *wait_for_ipc_msg(void) +static gchar * +wait_for_ipc_msg(void) { - gtk_main(); - return e_ipc_msg; + gtk_main(); + return e_ipc_msg; } char * atword(char *s, int num) { - int cnt, i; + int cnt, i; - if (!s) + if (!s) + return NULL; + cnt = 0; + i = 0; + + while (s[i]) + { + if ((s[i] != ' ') && (s[i] != '\t')) + { + if (i == 0) + { + cnt++; + } + else if ((s[i - 1] == ' ') || (s[i - 1] == '\t')) + { + cnt++; + } + if (cnt == num) + return &s[i]; + } + i++; + } + return NULL; +} + +void +change_action(GtkWidget * my_clist, gint row, gint column, + GdkEventButton * event, gpointer data) +{ + if (data) + { + event = NULL; + my_clist = NULL; + column = 0; + } + + if (!dont_update) + { + gtk_entry_set_editable(GTK_ENTRY(act_params), FALSE); + gtk_widget_set_sensitive(act_params, FALSE); + if (actions[row].param_tpe != 0) + { + gtk_entry_set_editable(GTK_ENTRY(act_params), TRUE); + gtk_widget_set_sensitive(act_params, TRUE); + } + else + { + gtk_entry_set_text(GTK_ENTRY(act_params), ""); + } + if (actions[row].params) + { + gtk_entry_set_text(GTK_ENTRY(act_params), actions[row].params); + } + gtk_clist_set_text(GTK_CLIST(clist), last_row, 2, actions[row].text); + gtk_clist_set_text(GTK_CLIST(clist), last_row, 3, + gtk_entry_get_text(GTK_ENTRY(act_params))); + } + + return; + +} + +void +on_save_data(GtkWidget * widget, gpointer data) +{ + char buf[8192]; + int i; + + if (data) + widget = NULL; + + sprintf(buf, "set_keybindings "); + for (i = 0; i < real_rows; i++) + { + char tmp[1024]; + char *params; + char params_tmp[1024]; + char *action; + char *key; + char *mod; + int modifier = 0; + int action_id = 0; + int j; + + gtk_clist_get_text(GTK_CLIST(clist), i, 0, &mod); + for (j = 0; j < 21; j++) + { + if (!strcmp(mod_str[j], mod)) + { + modifier = j; + } + } + gtk_clist_get_text(GTK_CLIST(clist), i, 1, &key); + gtk_clist_get_text(GTK_CLIST(clist), i, 2, &action); + for (j = 0; (actions[j].text); j++) + { + if (!strcmp(actions[j].text, action)) + { + action_id = actions[j].id; + } + } + gtk_clist_get_text(GTK_CLIST(clist), i, 3, ¶ms); + if (strcmp(params, "")) + { + if (action_id == 9) + { + sprintf(params_tmp, "%s %s", "named", params); + params = (char *)params_tmp; + } + sprintf(tmp, "%s %i %i %s\n", key, modifier, action_id, params); + } + else + { + sprintf(tmp, "%s %i %i\n", key, modifier, action_id); + } + strcat(buf, tmp); + + } + /* printf("%s",buf); */ + CommsSend(buf); + CommsSend("save_config"); + return; + +} + +void +selection_made(GtkWidget * my_clist, gint row, gint column, + GdkEventButton * event, gpointer data) +{ + + gchar *modstring; + gchar *keyused; + gchar *actperform; + gchar *paramsused; + int i; + + if (data) + { + event = NULL; + my_clist = NULL; + column = 0; + } + + dont_update = 1; + gtk_clist_get_text(GTK_CLIST(clist), row, 0, &modstring); + gtk_option_menu_set_history(GTK_OPTION_MENU(act_mod), 0); + for (i = 1; i < 20; i++) + { + if (!strcmp(mod_str[i], modstring)) + { + gtk_option_menu_set_history(GTK_OPTION_MENU(act_mod), i); + } + } + gtk_clist_get_text(GTK_CLIST(clist), row, 1, &keyused); + gtk_entry_set_text(GTK_ENTRY(act_key), keyused); + gtk_clist_get_text(GTK_CLIST(clist), row, 2, &actperform); + gtk_entry_set_editable(GTK_ENTRY(act_params), FALSE); + gtk_widget_set_sensitive(act_params, FALSE); + for (i = 0; (actions[i].text); i++) + { + if (!strcmp(actperform, actions[i].text)) + { + if (actions[i].param_tpe != 0) + { + gtk_entry_set_editable(GTK_ENTRY(act_params), TRUE); + gtk_widget_set_sensitive(act_params, TRUE); + } + gtk_clist_select_row(GTK_CLIST(act_clist), i, 0); + gtk_clist_moveto(GTK_CLIST(act_clist), i, 0, 0.5, 0.5); + } + } + gtk_clist_get_text(GTK_CLIST(clist), row, 3, ¶msused); + gtk_entry_set_text(GTK_ENTRY(act_params), paramsused); + + /* printf("%s\n%s\n%s\n%s\n",modstring,keyused,actperform,paramsused); */ + + last_row = row; + dont_update = 0; + + return; +} + +static gchar *get_line(gchar * str, int num); + +static gchar * +get_line(gchar * str, int num) +{ + gchar *s1, *s2, *s; + gint i, count, l; + + i = 0; + count = 0; + s1 = str; + if (*str == '\n') + i = 1; + s2 = NULL; + for (i = 0;; i++) + { + if ((str[i] == '\n') || (str[i] == 0)) + { + s2 = &(str[i]); + if ((count == num) && (s2 > s1)) + { + l = s2 - s1; + s = g_malloc(l + 1); + strncpy(s, s1, l); + s[l] = 0; + return s; + } + count++; + if (str[i] == 0) return NULL; - cnt = 0; - i = 0; - - while (s[i]) { - if ((s[i] != ' ') && (s[i] != '\t')) { - if (i == 0) { - cnt++; - } else if ((s[i - 1] == ' ') || (s[i - 1] == '\t')) { - cnt++; - } - if (cnt == num) - return &s[i]; - } - i++; - } - return NULL; + s1 = s2 + 1; + } + } } void -change_action(GtkWidget *my_clist, gint row, gint column, GdkEventButton *event, - gpointer data) +on_resort_columns(GtkWidget * widget, gint column, gpointer user_data) { - if(data) { - event = NULL; - my_clist = NULL; - column = 0; - } + static int order = 0; + static int last_col = 0; - if(!dont_update) { - gtk_entry_set_editable(GTK_ENTRY(act_params),FALSE); - gtk_widget_set_sensitive(act_params,FALSE); - if(actions[row].param_tpe != 0) { - gtk_entry_set_editable(GTK_ENTRY(act_params),TRUE); - gtk_widget_set_sensitive(act_params,TRUE); - } else { - gtk_entry_set_text(GTK_ENTRY(act_params),""); - } - if(actions[row].params) { - gtk_entry_set_text(GTK_ENTRY(act_params),actions[row].params); - } - gtk_clist_set_text(GTK_CLIST(clist),last_row,2,actions[row].text); - gtk_clist_set_text(GTK_CLIST(clist),last_row,3, - gtk_entry_get_text(GTK_ENTRY(act_params))); - } + if (user_data) + { + widget = NULL; + } + gtk_clist_set_sort_column(GTK_CLIST(clist), column); + if (last_col == column) + { + if (order) + { + order = 0; + gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_DESCENDING); + } + else + { + order = 1; + gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_ASCENDING); + } + } + else + { + order = 1; + gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_ASCENDING); + last_col = column; + } - return; + gtk_clist_sort(GTK_CLIST(clist)); + + return; } void -on_save_data(GtkWidget *widget, gpointer data) -{ - char buf[8192]; - int i; - - if(data) - widget = NULL; - - sprintf(buf,"set_keybindings "); - for(i=0;i s1)) { - l = s2 - s1; - s = g_malloc(l + 1); - strncpy(s, s1, l); - s[l] = 0; - return s; - } - count++; - if (str[i] == 0) - return NULL; - s1 = s2 + 1; - } - } -} - -void -on_resort_columns(GtkWidget *widget, gint column, gpointer user_data) -{ - static int order=0; - static int last_col=0; - - if(user_data) { - widget = NULL; - } - gtk_clist_set_sort_column(GTK_CLIST(clist),column); - if(last_col == column) { - if(order) { - order=0; - gtk_clist_set_sort_type(GTK_CLIST(clist),GTK_SORT_DESCENDING); - } else { - order=1; - gtk_clist_set_sort_type(GTK_CLIST(clist),GTK_SORT_ASCENDING); - } - } else { - order=1; - gtk_clist_set_sort_type(GTK_CLIST(clist),GTK_SORT_ASCENDING); - last_col = column; - } - - gtk_clist_sort(GTK_CLIST(clist)); - - return; - -} - -void on_delete_row(GtkWidget * widget, gpointer user_data) -{ - - if (user_data) { - widget = NULL; - } - - gtk_clist_remove(GTK_CLIST(clist),last_row); - gtk_clist_select_row(GTK_CLIST(clist),0,0); - gtk_clist_moveto(GTK_CLIST(clist),0,0,0.5,0.5); - real_rows--; - - return; + return; } @@ -468,457 +508,481 @@ void on_create_row(GtkWidget * widget, gpointer user_data) { - char *stuff[4]; + char *stuff[4]; - if (user_data) { - widget = NULL; - } - stuff[0] = malloc(2); - strcpy(stuff[0], ""); - stuff[1] = malloc(2); - strcpy(stuff[1], ""); - stuff[2] = malloc(2); - strcpy(stuff[2], ""); - stuff[3] = malloc(2); - strcpy(stuff[3], ""); - gtk_clist_select_row(GTK_CLIST(clist), - gtk_clist_append(GTK_CLIST(clist), stuff),0); + if (user_data) + { + widget = NULL; + } + stuff[0] = malloc(2); + strcpy(stuff[0], ""); + stuff[1] = malloc(2); + strcpy(stuff[1], ""); + stuff[2] = malloc(2); + strcpy(stuff[2], ""); + stuff[3] = malloc(2); + strcpy(stuff[3], ""); + gtk_clist_select_row(GTK_CLIST(clist), + gtk_clist_append(GTK_CLIST(clist), stuff), 0); - if(stuff[0]) - free(stuff[0]); - if(stuff[1]) - free(stuff[1]); - if(stuff[2]) - free(stuff[2]); - if(stuff[3]) - free(stuff[3]); + if (stuff[0]) + free(stuff[0]); + if (stuff[1]) + free(stuff[1]); + if (stuff[2]) + free(stuff[2]); + if (stuff[3]) + free(stuff[3]); - real_rows++; + real_rows++; - return; + return; } void -on_change_params(GtkWidget *widget, gpointer user_data) +on_change_params(GtkWidget * widget, gpointer user_data) { - if (user_data) { - widget = NULL; - } + if (user_data) + { + widget = NULL; + } - if(!dont_update) { - gtk_clist_set_text(GTK_CLIST(clist),last_row,3, - gtk_entry_get_text(GTK_ENTRY(act_params))); - } + if (!dont_update) + { + gtk_clist_set_text(GTK_CLIST(clist), last_row, 3, + gtk_entry_get_text(GTK_ENTRY(act_params))); + } - return; + return; } void on_exit_application(GtkWidget * widget, gpointer user_data) { - if (user_data) { - widget = NULL; - } - gtk_exit(0); + if (user_data) + { + widget = NULL; + } + gtk_exit(0); } void on_save_and_exit_application(GtkWidget * widget, gpointer user_data) { - on_save_data(widget, user_data); - on_exit_application(widget, user_data); + on_save_data(widget, user_data); + on_exit_application(widget, user_data); } -GtkWidget * +GtkWidget * create_list_window(void) { - GtkWidget *list_window; - GtkWidget *bigvbox; - GtkWidget *menubar; - GtkWidget *panes; - GtkWidget *scrollybit; - GtkWidget *vbox; - GtkWidget *frames; - GtkWidget *alignment; - GtkWidget *frame_vbox; - GtkWidget *table; - GtkWidget *label; - GtkWidget *entry; - GtkWidget *button; - GtkWidget *hbox; - GtkWidget *m,*mi,*om; + GtkWidget *list_window; + GtkWidget *bigvbox; + GtkWidget *menubar; + GtkWidget *panes; + GtkWidget *scrollybit; + GtkWidget *vbox; + GtkWidget *frames; + GtkWidget *alignment; + GtkWidget *frame_vbox; + GtkWidget *table; + GtkWidget *label; + GtkWidget *entry; + GtkWidget *button; + GtkWidget *hbox; + GtkWidget *m, *mi, *om; + list_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_object_set_data(GTK_OBJECT(list_window), "key_editor", list_window); + GTK_WIDGET_SET_FLAGS(list_window, GTK_CAN_FOCUS); + GTK_WIDGET_SET_FLAGS(list_window, GTK_CAN_DEFAULT); + gtk_window_set_title(GTK_WINDOW(list_window), "E Keys Editor"); - list_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_object_set_data(GTK_OBJECT(list_window), "key_editor", list_window); - GTK_WIDGET_SET_FLAGS(list_window, GTK_CAN_FOCUS); - GTK_WIDGET_SET_FLAGS(list_window, GTK_CAN_DEFAULT); - gtk_window_set_title(GTK_WINDOW(list_window), "E Keys Editor"); + bigvbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(bigvbox); + gtk_container_add(GTK_CONTAINER(list_window), bigvbox); - bigvbox = gtk_vbox_new(FALSE,0); - gtk_widget_show(bigvbox); - gtk_container_add(GTK_CONTAINER(list_window), bigvbox); + menubar = gtk_menu_bar_new(); + gtk_widget_show(menubar); + gtk_box_pack_start(GTK_BOX(bigvbox), menubar, FALSE, FALSE, 0); - menubar = gtk_menu_bar_new(); - gtk_widget_show(menubar); - gtk_box_pack_start(GTK_BOX(bigvbox), menubar, FALSE, FALSE, 0); + { + GtkWidget *menu; + GtkWidget *menuitem; - { - GtkWidget *menu; - GtkWidget *menuitem; - - menu = CreateBarSubMenu(menubar,"File"); - menuitem = CreateMenuItem(menu,"Save","","Save Current Data",NULL, + menu = CreateBarSubMenu(menubar, "File"); + menuitem = CreateMenuItem(menu, "Save", "", "Save Current Data", NULL, "save data"); - gtk_signal_connect(GTK_OBJECT(menuitem),"activate", - GTK_SIGNAL_FUNC(on_save_data),NULL); - menuitem = CreateMenuItem(menu,"Save & Quit","", - "Save Current Data & Quit Application",NULL, "save quit"); - gtk_signal_connect(GTK_OBJECT(menuitem),"activate", - GTK_SIGNAL_FUNC(on_save_and_exit_application),NULL); - menuitem = CreateMenuItem(menu,"Quit","","Quit Without Saving",NULL, - "quit program"); - gtk_signal_connect(GTK_OBJECT(menuitem),"activate", - GTK_SIGNAL_FUNC(on_exit_application),NULL); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(on_save_data), NULL); + menuitem = CreateMenuItem(menu, "Save & Quit", "", + "Save Current Data & Quit Application", NULL, + "save quit"); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(on_save_and_exit_application), NULL); + menuitem = + CreateMenuItem(menu, "Quit", "", "Quit Without Saving", NULL, + "quit program"); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(on_exit_application), NULL); - } + } + { + GtkWidget *menu; + GtkWidget *menuitem; + + menu = CreateRightAlignBarSubMenu(menubar, "Help"); + menuitem = + CreateMenuItem(menu, "About", "", "About E Keybinding Editor", + NULL, "about"); + menuitem = + CreateMenuItem(menu, "Documentation", "", + "Read the Keybinding Editor Documentation", NULL, + "read docs"); + + } + + panes = gtk_hpaned_new(); + gtk_widget_show(panes); + gtk_paned_set_gutter_size(GTK_PANED(panes), 10); + gtk_box_pack_start(GTK_BOX(bigvbox), panes, TRUE, TRUE, 0); + + scrollybit = gtk_scrolled_window_new(NULL, NULL); + gtk_widget_show(scrollybit); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollybit), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_paned_pack1(GTK_PANED(panes), scrollybit, TRUE, FALSE); + + clist = gtk_clist_new(4); + gtk_widget_show(clist); + gtk_container_add(GTK_CONTAINER(scrollybit), clist); + + gtk_clist_set_column_title(GTK_CLIST(clist), 0, "Modifier"); + gtk_clist_set_column_title(GTK_CLIST(clist), 1, "Key Used"); + gtk_clist_set_column_title(GTK_CLIST(clist), 2, "Action to Perform"); + gtk_clist_set_column_title(GTK_CLIST(clist), 3, "Parameters Used"); + gtk_clist_column_titles_show(GTK_CLIST(clist)); + gtk_signal_connect(GTK_OBJECT(clist), "select_row", + GTK_SIGNAL_FUNC(selection_made), NULL); + gtk_signal_connect(GTK_OBJECT(clist), "click_column", + GTK_SIGNAL_FUNC(on_resort_columns), NULL); + + { + gchar *msg; + gint i, j, k; + gchar *buf; + gchar cmd[4096]; + + CommsSend("get_keybindings"); + msg = wait_for_ipc_msg(); + i = 0; + while ((buf = get_line(msg, i++))) { - GtkWidget *menu; - GtkWidget *menuitem; + /* stuff[0] = modifier */ + /* stuff[1] = key */ + /* stuff[2] = action */ + /* stuff[3] = params */ - menu = CreateRightAlignBarSubMenu(menubar,"Help"); - menuitem = CreateMenuItem(menu,"About","","About E Keybinding Editor", - NULL, "about"); - menuitem = CreateMenuItem(menu,"Documentation","", - "Read the Keybinding Editor Documentation",NULL, "read docs"); + char *stuff[4]; + stuff[0] = malloc(1024); + stuff[1] = malloc(1024); + stuff[2] = malloc(1024); + stuff[3] = malloc(1024); + if (strlen(buf) < 1) + break; + sscanf(buf, "%1000s", cmd); + sprintf(stuff[1], "%s", cmd); + sscanf(buf, "%*s %i", &j); + sprintf(stuff[0], "%s", mod_str[j]); + sscanf(buf, "%*s %*s %i", &j); + strcpy(stuff[2], ""); + /*sprintf(stuff[2],"%s",actions[j].text); */ + if (atword(buf, 4)) + { + sprintf(stuff[3], "%s", atword(buf, 4)); + } + else + { + strcpy(stuff[3], ""); + } + for (k = 0; (actions[k].text); k++) + { + if (j == actions[k].id) + { + if (strcmp(stuff[3], "")) + { + if ((j == 9) && (!strncmp(stuff[3], "named", 5))) + sscanf(stuff[3], "%*s %s", stuff[3]); + if ((actions[k].param_tpe == 0) + && (actions[k].params)) + { + if (!strcmp(stuff[3], actions[k].params)) + { + sprintf(stuff[2], "%s", actions[k].text); + } + } + else + { + sprintf(stuff[2], "%s", actions[k].text); + } + } + else if (!actions[k].params) + { + sprintf(stuff[2], "%s", actions[k].text); + } + } + } + if (strcmp(stuff[2], "")) + { + gtk_clist_append(GTK_CLIST(clist), stuff); + real_rows++; + } + free(stuff[0]); + free(stuff[1]); + free(stuff[2]); + free(stuff[3]); + g_free(buf); } + g_free(msg); - panes = gtk_hpaned_new(); - gtk_widget_show(panes); - gtk_paned_set_gutter_size(GTK_PANED(panes), 10); - gtk_box_pack_start(GTK_BOX(bigvbox), panes, TRUE, TRUE, 0); + } - scrollybit = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrollybit); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollybit), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_paned_pack1(GTK_PANED(panes), scrollybit, TRUE, FALSE); + vbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(vbox); + frames = gtk_frame_new("Edit Keybinding Properties"); + gtk_container_set_border_width(GTK_CONTAINER(frames), 2); + gtk_widget_show(frames); + gtk_paned_pack2(GTK_PANED(panes), vbox, FALSE, TRUE); + gtk_box_pack_start(GTK_BOX(vbox), frames, TRUE, TRUE, 0); - clist = gtk_clist_new(4); - gtk_widget_show(clist); - gtk_container_add(GTK_CONTAINER(scrollybit), clist); + frame_vbox = gtk_vbox_new(FALSE, 3); + gtk_widget_show(frame_vbox); - gtk_clist_set_column_title(GTK_CLIST(clist), 0, "Modifier"); - gtk_clist_set_column_title(GTK_CLIST(clist), 1, "Key Used"); - gtk_clist_set_column_title(GTK_CLIST(clist), 2, "Action to Perform"); - gtk_clist_set_column_title(GTK_CLIST(clist), 3, "Parameters Used"); - gtk_clist_column_titles_show(GTK_CLIST(clist)); - gtk_signal_connect(GTK_OBJECT(clist), "select_row", - GTK_SIGNAL_FUNC(selection_made), NULL); - gtk_signal_connect(GTK_OBJECT(clist), "click_column", - GTK_SIGNAL_FUNC(on_resort_columns), NULL); + gtk_container_set_border_width(GTK_CONTAINER(frame_vbox), 4); + gtk_container_add(GTK_CONTAINER(frames), frame_vbox); + table = gtk_table_new(3, 3, FALSE); + gtk_widget_show(table); + gtk_table_set_row_spacings(GTK_TABLE(table), 3); + gtk_table_set_col_spacings(GTK_TABLE(table), 3); + gtk_box_pack_start(GTK_BOX(frame_vbox), table, FALSE, FALSE, 2); + + alignment = gtk_alignment_new(1.0, 0.5, 0, 0); + label = gtk_label_new("Key:"); + gtk_container_add(GTK_CONTAINER(alignment), label); + gtk_widget_show(alignment); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 0, 1, + GTK_FILL, (GtkAttachOptions) (0), 0, 0); + + alignment = gtk_alignment_new(1.0, 0.5, 0, 0); + label = gtk_label_new("Modifier:"); + gtk_container_add(GTK_CONTAINER(alignment), label); + gtk_widget_show(alignment); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 1, 2, + GTK_FILL, (GtkAttachOptions) (0), 0, 0); + + alignment = gtk_alignment_new(1.0, 0.5, 0, 0); + label = gtk_label_new("Parameters:"); + gtk_container_add(GTK_CONTAINER(alignment), label); + gtk_widget_show(alignment); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 2, 3, + GTK_FILL, (GtkAttachOptions) (0), 0, 0); + + act_key = entry = gtk_entry_new_with_max_length(4096); + gtk_widget_show(entry); + gtk_widget_set_sensitive(entry, FALSE); + /* gtk_widget_set_usize(entry, 24, -1); */ + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, + GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); + + button = gtk_button_new_with_label("Change"); + gtk_widget_show(button); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1, + GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(e_cb_key_change), NULL); + + m = gtk_menu_new(); + gtk_widget_show(m); + + mi = gtk_menu_item_new_with_label("NONE"); + gtk_widget_show(mi); + gtk_signal_connect(GTK_OBJECT(mi), "activate", + GTK_SIGNAL_FUNC(e_cb_modifier), (gpointer) 0); + gtk_menu_append(GTK_MENU(m), mi); + { + gint i; + + for (i = 1; i < 21; i++) { - gchar *msg; - gint i, j, k; - gchar *buf; - gchar cmd[4096]; - - CommsSend("get_keybindings"); - msg = wait_for_ipc_msg(); - i = 0; - while ((buf = get_line(msg, i++))) { - /* stuff[0] = modifier */ - /* stuff[1] = key */ - /* stuff[2] = action */ - /* stuff[3] = params */ - - char *stuff[4]; - - stuff[0] = malloc(1024); - stuff[1] = malloc(1024); - stuff[2] = malloc(1024); - stuff[3] = malloc(1024); - if (strlen(buf) < 1) - break; - sscanf(buf, "%1000s", cmd); - sprintf(stuff[1],"%s",cmd); - sscanf(buf, "%*s %i", &j); - sprintf(stuff[0],"%s",mod_str[j]); - sscanf(buf, "%*s %*s %i", &j); - strcpy(stuff[2],""); - /*sprintf(stuff[2],"%s",actions[j].text); */ - if (atword(buf, 4)) { - sprintf(stuff[3],"%s",atword(buf, 4)); - } else { - strcpy(stuff[3],""); - } - for (k = 0; (actions[k].text); k++) { - if (j == actions[k].id) { - if (strcmp(stuff[3],"")) { - if ((j==9) && (!strncmp(stuff[3],"named",5))) - sscanf(stuff[3],"%*s %s",stuff[3]); - if ((actions[k].param_tpe == 0)&&(actions[k].params)) { - if (!strcmp(stuff[3], actions[k].params)) { - sprintf(stuff[2],"%s",actions[k].text); - } - } else { - sprintf(stuff[2],"%s",actions[k].text); - } - } else if (!actions[k].params) { - sprintf(stuff[2],"%s",actions[k].text); - } - } - } - if(strcmp(stuff[2],"")) { - gtk_clist_append(GTK_CLIST(clist), stuff); - real_rows++; - } - free(stuff[0]); - free(stuff[1]); - free(stuff[2]); - free(stuff[3]); - g_free(buf); - } - g_free(msg); - + mi = gtk_menu_item_new_with_label(mod_str[i]); + gtk_widget_show(mi); + gtk_signal_connect(GTK_OBJECT(mi), "activate", + GTK_SIGNAL_FUNC(e_cb_modifier), (gpointer) i); + gtk_menu_append(GTK_MENU(m), mi); } + } - vbox = gtk_vbox_new(FALSE,0); - gtk_widget_show(vbox); - frames = gtk_frame_new("Edit Keybinding Properties"); - gtk_container_set_border_width(GTK_CONTAINER(frames),2); - gtk_widget_show(frames); - gtk_paned_pack2(GTK_PANED(panes),vbox,FALSE,TRUE); - gtk_box_pack_start(GTK_BOX(vbox), frames, TRUE, TRUE, 0); + act_mod = om = gtk_option_menu_new(); + gtk_widget_show(om); + gtk_option_menu_set_menu(GTK_OPTION_MENU(om), m); + gtk_option_menu_set_history(GTK_OPTION_MENU(om), 0); + gtk_table_attach(GTK_TABLE(table), om, 1, 3, 1, 2, + GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); + act_params = entry = gtk_entry_new_with_max_length(4096); + gtk_widget_show(entry); + gtk_widget_set_sensitive(entry, FALSE); + gtk_table_attach(GTK_TABLE(table), entry, 1, 3, 2, 3, + GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + GTK_SIGNAL_FUNC(on_change_params), NULL); - frame_vbox = gtk_vbox_new(FALSE,3); - gtk_widget_show(frame_vbox); + scrollybit = gtk_scrolled_window_new(NULL, NULL); + gtk_widget_show(scrollybit); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollybit), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_container_set_border_width(GTK_CONTAINER(frame_vbox),4); - gtk_container_add(GTK_CONTAINER(frames), frame_vbox); + act_clist = gtk_clist_new(1); + gtk_widget_show(act_clist); + gtk_box_pack_start(GTK_BOX(frame_vbox), scrollybit, TRUE, TRUE, 0); + gtk_clist_set_column_title(GTK_CLIST(act_clist), 0, "Action Used:"); + gtk_clist_column_titles_show(GTK_CLIST(act_clist)); + gtk_signal_connect(GTK_OBJECT(act_clist), "select_row", + GTK_SIGNAL_FUNC(change_action), NULL); + gtk_container_add(GTK_CONTAINER(scrollybit), act_clist); - table = gtk_table_new(3, 3, FALSE); - gtk_widget_show(table); - gtk_table_set_row_spacings(GTK_TABLE(table),3); - gtk_table_set_col_spacings(GTK_TABLE(table),3); - gtk_box_pack_start(GTK_BOX(frame_vbox), table, FALSE, FALSE, 2); + { + char *stuff[1]; + int k; - alignment = gtk_alignment_new(1.0,0.5,0,0); - label = gtk_label_new("Key:"); - gtk_container_add(GTK_CONTAINER(alignment),label); - gtk_widget_show(alignment); - gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); - gtk_widget_show(label); - gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 0, 1, - GTK_FILL, (GtkAttachOptions) (0), 0, 0); - - alignment = gtk_alignment_new(1.0,0.5,0,0); - label = gtk_label_new("Modifier:"); - gtk_container_add(GTK_CONTAINER(alignment),label); - gtk_widget_show(alignment); - gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); - gtk_widget_show(label); - gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 1, 2, - GTK_FILL, (GtkAttachOptions) (0), 0, 0); - - alignment = gtk_alignment_new(1.0,0.5,0,0); - label = gtk_label_new("Parameters:"); - gtk_container_add(GTK_CONTAINER(alignment),label); - gtk_widget_show(alignment); - gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); - gtk_widget_show(label); - gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 2, 3, - GTK_FILL, (GtkAttachOptions) (0), 0, 0); - - act_key = entry = gtk_entry_new_with_max_length(4096); - gtk_widget_show(entry); - gtk_widget_set_sensitive(entry, FALSE); - /* gtk_widget_set_usize(entry, 24, -1); */ - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); - - button = gtk_button_new_with_label("Change"); - gtk_widget_show(button); - gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1, - GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect(GTK_OBJECT(button),"clicked", - GTK_SIGNAL_FUNC(e_cb_key_change),NULL); - - - - m = gtk_menu_new(); - gtk_widget_show(m); - - mi = gtk_menu_item_new_with_label("NONE"); - gtk_widget_show(mi); - gtk_signal_connect(GTK_OBJECT(mi), "activate", - GTK_SIGNAL_FUNC(e_cb_modifier), (gpointer) 0); - gtk_menu_append(GTK_MENU(m), mi); + for (k = 0; (actions[k].text); k++) { - gint i; - for(i=1;i<21;i++) { - mi = gtk_menu_item_new_with_label(mod_str[i]); - gtk_widget_show(mi); - gtk_signal_connect(GTK_OBJECT(mi), "activate", - GTK_SIGNAL_FUNC(e_cb_modifier), (gpointer) i); - gtk_menu_append(GTK_MENU(m), mi); - } + stuff[0] = malloc(1024); + strcpy(stuff[0], actions[k].text); + gtk_clist_append(GTK_CLIST(act_clist), stuff); + free(stuff[0]); } + } - act_mod = om = gtk_option_menu_new(); - gtk_widget_show(om); - gtk_option_menu_set_menu(GTK_OPTION_MENU(om), m); - gtk_option_menu_set_history(GTK_OPTION_MENU(om), 0); - gtk_table_attach(GTK_TABLE(table),om, 1, 3, 1, 2, - GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); + hbox = gtk_hbox_new(FALSE, 0); + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - act_params = entry = gtk_entry_new_with_max_length(4096); - gtk_widget_show(entry); - gtk_widget_set_sensitive(entry,FALSE); - gtk_table_attach(GTK_TABLE(table),entry, 1, 3, 2, 3, - GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect(GTK_OBJECT(entry),"changed", - GTK_SIGNAL_FUNC(on_change_params),NULL); + button = gtk_button_new_with_label(" New Keybinding "); + gtk_widget_show(button); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_create_row), NULL); - scrollybit = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrollybit); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollybit), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + button = gtk_button_new_with_label(" Delete Current Row "); + gtk_widget_show(button); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_delete_row), NULL); - act_clist = gtk_clist_new(1); - gtk_widget_show(act_clist); - gtk_box_pack_start(GTK_BOX(frame_vbox), scrollybit, TRUE, TRUE, 0); - gtk_clist_set_column_title(GTK_CLIST(act_clist), 0, "Action Used:"); - gtk_clist_column_titles_show(GTK_CLIST(act_clist)); - gtk_signal_connect(GTK_OBJECT(act_clist), "select_row", - GTK_SIGNAL_FUNC(change_action),NULL); - gtk_container_add(GTK_CONTAINER(scrollybit), act_clist); + button = gtk_button_new_with_label(" Save "); + gtk_widget_show(button); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_save_data), NULL); - { - char *stuff[1]; - int k; - for(k=0; (actions[k].text); k++) { - stuff[0] = malloc(1024); - strcpy(stuff[0],actions[k].text); - gtk_clist_append(GTK_CLIST(act_clist),stuff); - free(stuff[0]); - } - } + button = gtk_button_new_with_label(" Quit "); + gtk_widget_show(button); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_exit_application), NULL); + gtk_clist_select_row(GTK_CLIST(clist), 0, 0); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); - - button = gtk_button_new_with_label(" New Keybinding "); - gtk_widget_show(button); - gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); - gtk_signal_connect(GTK_OBJECT(button),"clicked", - GTK_SIGNAL_FUNC(on_create_row),NULL); - - button = gtk_button_new_with_label(" Delete Current Row "); - gtk_widget_show(button); - gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); - gtk_signal_connect(GTK_OBJECT(button),"clicked", - GTK_SIGNAL_FUNC(on_delete_row),NULL); - - button = gtk_button_new_with_label(" Save "); - gtk_widget_show(button); - gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); - gtk_signal_connect(GTK_OBJECT(button),"clicked", - GTK_SIGNAL_FUNC(on_save_data),NULL); - - button = gtk_button_new_with_label(" Quit "); - gtk_widget_show(button); - gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5); - gtk_signal_connect(GTK_OBJECT(button),"clicked", - GTK_SIGNAL_FUNC(on_exit_application),NULL); - - gtk_clist_select_row(GTK_CLIST(clist),0,0); - - return list_window; + return list_window; } static void receive_ipc_msg(gchar * msg) { - gdk_flush(); - e_ipc_msg = g_strdup(msg); + gdk_flush(); + e_ipc_msg = g_strdup(msg); - gtk_main_quit(); + gtk_main_quit(); } int main(int argc, char *argv[]) { - GtkWidget *lister; + GtkWidget *lister; - gtk_set_locale(); - gtk_init(&argc, &argv); + gtk_set_locale(); + gtk_init(&argc, &argv); - tooltips = gtk_tooltips_new(); - accel_group = gtk_accel_group_new(); + tooltips = gtk_tooltips_new(); + accel_group = gtk_accel_group_new(); - if(!CommsInit(receive_ipc_msg)) { - GtkWidget *win, *label, *align, *frame, *button, *vbox; - - win = gtk_window_new(GTK_WINDOW_POPUP); - gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1); - gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); - align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); - gtk_container_set_border_width(GTK_CONTAINER(align), 32); - vbox = gtk_vbox_new(FALSE, 5); - button = gtk_button_new_with_label("Quit"); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(on_exit_application), NULL); - label = gtk_label_new("You are not running Enlightenment\n" - "\n" - "This window manager has to be running in order\n" - "to configure it.\n" "\n"); - gtk_container_add(GTK_CONTAINER(win), frame); - gtk_container_add(GTK_CONTAINER(frame), align); - gtk_container_add(GTK_CONTAINER(align), vbox); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); - gtk_widget_show_all(win); - gtk_main(); - exit(1); - } - CommsSend("set clientname Enlightenment Keybinding Configuration Utility"); - CommsSend("set version 0.1.0"); - CommsSend("set author Mandrake (Geoff Harrison)"); - CommsSend("set email mandrake@mandrake.net"); - CommsSend("set web http://mandrake.net/"); - CommsSend("set address C/O VA Linux Systems, USA"); - CommsSend("set info " - "This is the Enlightenemnt KeyBindings Configuration Utility\n" - "that uses Enlightenment's IPC mechanism to configure\n" - "it remotely."); - - lister = create_list_window(); - - gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); - gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 1, TRUE); - - gtk_widget_show(lister); - gtk_signal_connect(GTK_OBJECT(lister), "destroy", - GTK_SIGNAL_FUNC(on_exit_application), NULL); - gtk_signal_connect(GTK_OBJECT(lister), "delete_event", - GTK_SIGNAL_FUNC(on_exit_application), NULL); + if (!CommsInit(receive_ipc_msg)) + { + GtkWidget *win, *label, *align, *frame, *button, *vbox; + win = gtk_window_new(GTK_WINDOW_POPUP); + gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1); + gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); + align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); + gtk_container_set_border_width(GTK_CONTAINER(align), 32); + vbox = gtk_vbox_new(FALSE, 5); + button = gtk_button_new_with_label("Quit"); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_exit_application), NULL); + label = gtk_label_new("You are not running Enlightenment\n" + "\n" + "This window manager has to be running in order\n" + "to configure it.\n" "\n"); + gtk_container_add(GTK_CONTAINER(win), frame); + gtk_container_add(GTK_CONTAINER(frame), align); + gtk_container_add(GTK_CONTAINER(align), vbox); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); + gtk_widget_show_all(win); gtk_main(); + exit(1); + } + CommsSend("set clientname Enlightenment Keybinding Configuration Utility"); + CommsSend("set version 0.1.0"); + CommsSend("set author Mandrake (Geoff Harrison)"); + CommsSend("set email mandrake@mandrake.net"); + CommsSend("set web http://mandrake.net/"); + CommsSend("set address C/O VA Linux Systems, USA"); + CommsSend("set info " + "This is the Enlightenemnt KeyBindings Configuration Utility\n" + "that uses Enlightenment's IPC mechanism to configure\n" + "it remotely."); - return 0; + lister = create_list_window(); + + gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); + gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 1, TRUE); + + gtk_widget_show(lister); + gtk_signal_connect(GTK_OBJECT(lister), "destroy", + GTK_SIGNAL_FUNC(on_exit_application), NULL); + gtk_signal_connect(GTK_OBJECT(lister), "delete_event", + GTK_SIGNAL_FUNC(on_exit_application), NULL); + + gtk_main(); + + return 0; } diff --git a/viewer.h b/viewer.h index b3114dd..c1aa045 100644 --- a/viewer.h +++ b/viewer.h @@ -1,19 +1,17 @@ -GtkWidget *create_list_window(void); -void on_exit_application(GtkWidget * widget, gpointer user_data); -void selection_made(GtkWidget *my_clist, gint row, gint column, - GdkEventButton *event, gpointer data); -void on_resort_columns(GtkWidget *widget, gint column, gpointer user_data); -void e_cb_modifier(GtkWidget * widget, gpointer data); -char *atword(char *s, int num); -void change_action(GtkWidget *my_clist, gint row, gint column, - GdkEventButton *event, gpointer data); -void on_change_params(GtkWidget *widget, gpointer user_data); -void e_cb_key_change(GtkWidget * widget, gpointer data); -void on_save_data(GtkWidget *widget, gpointer data); -void on_delete_row(GtkWidget * widget, gpointer user_data); -void on_create_row(GtkWidget * widget, gpointer user_data); - - -GtkTooltips *tooltips; -GtkAccelGroup *accel_group; +GtkWidget *create_list_window(void); +void on_exit_application(GtkWidget * widget, gpointer user_data); +void selection_made(GtkWidget * my_clist, gint row, gint column, + GdkEventButton * event, gpointer data); +void on_resort_columns(GtkWidget * widget, gint column, + gpointer user_data); +void e_cb_modifier(GtkWidget * widget, gpointer data); +void change_action(GtkWidget * my_clist, gint row, gint column, + GdkEventButton * event, gpointer data); +void on_change_params(GtkWidget * widget, gpointer user_data); +void e_cb_key_change(GtkWidget * widget, gpointer data); +void on_save_data(GtkWidget * widget, gpointer data); +void on_delete_row(GtkWidget * widget, gpointer user_data); +void on_create_row(GtkWidget * widget, gpointer user_data); +GtkTooltips *tooltips; +GtkAccelGroup *accel_group;