#include #include #include #include #include #include #include #include #include "viewer.h" #include "menus.h" #include "ipc.h" extern GtkTooltips *tooltips; extern GtkAccelGroup *accel_group; 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); 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; } 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" }; static ActionOpt actions[] = { {"Run command", 1, 1, 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}, {"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}, {"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}, {"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"}, {"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}, {"Set Window border style to the Default", 69, 0, "DEFAULT"}, {"Set Window border style to the Borderless", 69, 0, "BORDERLESS"}, {"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"}, {"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} }; void e_cb_key_change(GtkWidget * widget, gpointer data) { GtkWidget *win, *label, *frame, *align; 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(); { 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_keyboard_ungrab(gdk_time_get()); 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); } void e_cb_modifier(GtkWidget * widget, gpointer data) { gint value; widget = NULL; value = (gint) data; gtk_clist_set_text(GTK_CLIST(clist),last_row,0,mod_str[value]); return; } static gchar *wait_for_ipc_msg(void) { gtk_main(); return e_ipc_msg; } char * atword(char *s, int num) { int cnt, i; 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 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; } void on_create_row(GtkWidget * widget, gpointer user_data) { 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(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++; return; } void on_change_params(GtkWidget *widget, gpointer user_data) { 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))); } return; } void on_exit_application(GtkWidget * widget, gpointer user_data) { 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); } 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; 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); menubar = gtk_menu_bar_new(); gtk_widget_show(menubar); gtk_box_pack_start(GTK_BOX(bigvbox), menubar, FALSE, FALSE, 0); { GtkWidget *menu; GtkWidget *menuitem; 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); } { 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++))) { /* 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); } 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); frame_vbox = gtk_vbox_new(FALSE,3); gtk_widget_show(frame_vbox); 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++) { 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); } } 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); 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); 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); { 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]); } } 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; } static void receive_ipc_msg(gchar * msg) { gdk_flush(); e_ipc_msg = g_strdup(msg); gtk_main_quit(); } int main(int argc, char *argv[]) { GtkWidget *lister; gtk_set_locale(); gtk_init(&argc, &argv); 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); gtk_main(); return 0; }