Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e16keyedit

Dir     : e16/e16keyedit


Modified Files:
        viewer.c 


Log Message:
Enable loading e16.8 actions/commands from external file. Attempt to improve 
layout.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e16keyedit/viewer.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- viewer.c    18 Mar 2006 15:32:19 -0000      1.24
+++ viewer.c    18 Mar 2006 19:13:15 -0000      1.25
@@ -1,11 +1,13 @@
 #include <gtk/gtk.h>
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/stat.h>
 #include <X11/Xlib.h>
 #include <gdk/gdkx.h>
 #include <unistd.h>
-#include <string.h>
+
 #include "viewer.h"
 #include "menus.h"
 #include "ipc.h"
@@ -75,8 +77,10 @@
 };
 #define N_MODIFIERS (sizeof(mod_str)/sizeof(char*))
 
+static const ActionOpt *actions;
+
 /* *INDENT-OFF* */
-static const ActionOpt actions[] = {
+static const ActionOpt actions_default[] = {
     {"Run command", 1, 1, NULL, "exec "},
 
     {"Restart Enlightenment", 7, 0, "restart", "restart"},
@@ -650,6 +654,7 @@
    GtkWidget          *menu, *menuitem;
 
    list_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+   gtk_window_set_default_size(GTK_WINDOW(list_window), 400, 400);
    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);
@@ -702,7 +707,7 @@
    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), 1, "Key");
    gtk_clist_set_column_title(GTK_CLIST(clist), 2, "Action to Perform");
    gtk_clist_set_column_title(GTK_CLIST(clist), 3, TXT_PARAMETERS_USED);
    gtk_clist_column_titles_show(GTK_CLIST(clist));
@@ -768,8 +773,8 @@
           g_free(buf);
        }
       g_free(msg);
-
    }
+   gtk_clist_columns_autosize(GTK_CLIST(clist));
 
    vbox = gtk_vbox_new(FALSE, 0);
    gtk_widget_show(vbox);
@@ -940,7 +945,7 @@
 static int
 get_e16_version(void)
 {
-   char               *msg = NULL;
+   char               *msg;
    const char         *s;
    int                 ver, minor;
 
@@ -965,6 +970,93 @@
    return ver;
 }
 
+static void
+load_actions(void)
+{
+   char                kbdb[1024], buf[1024], text[1024], command[1024];
+   char               *s;
+   FILE               *f;
+   int                 n, opt;
+   unsigned int        nao;
+   ActionOpt          *pao;
+
+   actions = actions_default;
+
+   if (e16_ver == VER_E16_OLD)
+      return;
+
+   /* FIXME - Should be fetched via IPC. */
+
+   s = getenv("EROOT");
+   if (!s)
+      return;
+
+   snprintf(kbdb, sizeof(kbdb), "%s/config/e16keyedit.db", s);
+
+   f = fopen(kbdb, "r");
+   if (!f)
+      return;
+
+   nao = 0;
+   pao = NULL;
+   for (;;)
+     {
+       s = fgets(buf, sizeof(buf), f);
+       if (!s)
+          break;
+       while (isspace(*s))
+          s++;
+       if (*s == '\0' || *s == '#')
+          continue;
+       n = strlen(s);
+       while (n > 0 && (s[n - 1] == '\n' || s[n - 1] == '\r'))
+          n--;
+       if (n <= 0)
+          continue;
+       s[n] = '\0';
+
+#if DEBUG > 0
+       printf("Got: %s\n", s);
+#endif
+       text[0] = command[0] = '\0';
+       opt = -1;
+       n = sscanf(s, "\"%1023[^\"]\", %d, \"%1023[^\"]\"", text, &opt,
+                  command);
+       if (n < 2)
+         {
+            printf("*** ERROR: %s\n", buf);
+            printf
+               ("*** ERROR: Keybindings database (%s) corrupt, using 
defaults.\n",
+                kbdb);
+            if (pao)
+               free(pao);
+            fclose(f);
+            return;
+         }
+#if DEBUG > 0
+       printf("n=%d t=%s o=%d c=%s\n", n, text, opt, command);
+#endif
+
+       pao = realloc(pao, (nao + 1) * sizeof(ActionOpt));
+       memset(pao + nao, 0, sizeof(ActionOpt));
+       pao[nao].text = strdup(text);
+       pao[nao].param_tpe = opt;
+       if (command[0])
+          pao[nao].command = strdup(command);
+       nao++;
+     }
+   fclose(f);
+
+   if (nao == 0)
+      return;                  /* No entries ??? */
+
+   /* Add terminator record */
+   pao = realloc(pao, (nao + 1) * sizeof(ActionOpt));
+   memset(pao + nao, 0, sizeof(ActionOpt));
+
+   actions = pao;
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -1020,6 +1112,8 @@
 
    e16_ver = get_e16_version();
 
+   load_actions();
+
    lister = create_list_window();
 
    gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to