X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=uzbl.c;h=c224f09f2206c525d493a5e55542704e85ab28c0;hb=55d7422467ff3460f40ef2cf05ac27e5446b5a73;hp=b23790348b82aabe52fa04724bbcd27de4e50eca;hpb=c74945ca08cf7c226c2eadb3e890bcf6ade4c76f;p=uzbl-mobile diff --git a/uzbl.c b/uzbl.c index b237903..c224f09 100644 --- a/uzbl.c +++ b/uzbl.c @@ -29,7 +29,7 @@ */ -#define LENGTH(x) (sizeof x / sizeof x[0]) +#define LENGTH(x) (sizeof x / sizeof x[0]) #include #include @@ -68,7 +68,7 @@ static gboolean show_status = FALSE; static gboolean insert_mode = FALSE; static gboolean status_top = FALSE; static gchar* modkey = NULL; - +static guint modmask = 0; typedef struct { const char *binding; @@ -229,7 +229,7 @@ run_command(const char *command, const char *args) { GString* to_execute = g_string_new (""); gboolean result; g_string_printf (to_execute, "%s '%s' '%i' '%i' '%s' %s", command, config_file, (int) getpid() , (int) xwin, "/tmp/uzbl_25165827", args); - result = system(to_execute->str); + result = g_spawn_command_line_async (to_execute->str, NULL); printf("Called %s. Result: %s\n", to_execute->str, (result ? "FALSE" : "TRUE" )); return result; } @@ -352,29 +352,33 @@ key_press_cb (WebKitWebView* page, GdkEventKey* event) if (event->type != GDK_KEY_PRESS) return result; - //TURN OFF INSERT MODE - if (insert_mode && (event->keyval == GDK_Escape)) { - insert_mode = FALSE; + //TURN OFF/ON INSERT MODE + if (!always_insert_mode && ((insert_mode && (event->keyval == GDK_Escape)) || (!insert_mode && (event->string[0] == 'i')))) { + insert_mode = !insert_mode; update_title (GTK_WINDOW (main_window)); return TRUE; } - //TURN ON INSERT MODE - if (!insert_mode && (event->string[0] == 'i')) { - insert_mode = TRUE; - update_title (GTK_WINDOW (main_window)); - return TRUE; + //INTERNAL BINDINGS + for (i = 0; i < num_internal_bindings; i++) { + if (strcmp(event->string, internal_bindings[i].binding) == 0) { + if (!insert_mode || (event->state == modmask)) { + parse_command (internal_bindings[i].action); + result = TRUE; + } + } } - //INTERNAL KEYS - if (always_insert_mode || !insert_mode) { - for (i = 0; i < num_internal_bindings; i++) { - if (event->string[0] == internal_bindings[i].binding[0]) { - parse_command (internal_bindings[i].action); + //EXTERNAL BINDINGS + for (i = 0; i < num_external_bindings; i++) { + if (strcmp(event->string, external_bindings[i].binding) == 0) { + if (!insert_mode || (event->state == modmask)) { + run_command(external_bindings[i].action, NULL); result = TRUE; - } - } + } + } } + if (!result) result = (insert_mode ? FALSE : TRUE); @@ -504,8 +508,28 @@ settings_init () { if (modkey) { printf ("Modkey: %s\n", modkey); } else { - printf ("Modkey disabled\n"); + printf ("Modkey disabled\n"); + modkey = ""; } + //POSSIBLE MODKEY VALUES (COMBINATIONS CAN BE USED) + gchar* modkeyup = g_utf8_strup(modkey, -1); + if (g_strrstr(modkeyup,"SHIFT") != NULL) modmask |= GDK_SHIFT_MASK; //the Shift key. + if (g_strrstr(modkeyup,"LOCK") != NULL) modmask |= GDK_LOCK_MASK; //a Lock key (depending on the modifier mapping of the X server this may either be CapsLock or ShiftLock). + if (g_strrstr(modkeyup,"CONTROL") != NULL) modmask |= GDK_CONTROL_MASK; //the Control key. + if (g_strrstr(modkeyup,"MOD1") != NULL) modmask |= GDK_MOD1_MASK; //the fourth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier, but normally it is the Alt key). + if (g_strrstr(modkeyup,"MOD2") != NULL) modmask |= GDK_MOD2_MASK; //the fifth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier). + if (g_strrstr(modkeyup,"MOD3") != NULL) modmask |= GDK_MOD3_MASK; //the sixth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier). + if (g_strrstr(modkeyup,"MOD4") != NULL) modmask |= GDK_MOD4_MASK; //the seventh modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier). + if (g_strrstr(modkeyup,"MOD5") != NULL) modmask |= GDK_MOD5_MASK; //the eighth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier). + if (g_strrstr(modkeyup,"BUTTON1") != NULL) modmask |= GDK_BUTTON1_MASK; //the first mouse button. + if (g_strrstr(modkeyup,"BUTTON2") != NULL) modmask |= GDK_BUTTON2_MASK; //the second mouse button. + if (g_strrstr(modkeyup,"BUTTON3") != NULL) modmask |= GDK_BUTTON3_MASK; //the third mouse button. + if (g_strrstr(modkeyup,"BUTTON4") != NULL) modmask |= GDK_BUTTON4_MASK; //the fourth mouse button. + if (g_strrstr(modkeyup,"BUTTON5") != NULL) modmask |= GDK_BUTTON5_MASK; //the fifth mouse button. + if (g_strrstr(modkeyup,"SUPER") != NULL) modmask |= GDK_SUPER_MASK; //the Super modifier. Since 2.10 + if (g_strrstr(modkeyup,"HYPER") != NULL) modmask |= GDK_HYPER_MASK; //the Hyper modifier. Since 2.10 + if (g_strrstr(modkeyup,"META") != NULL) modmask |= GDK_META_MASK; //the Meta modifier. Since 2.10 */ + free (modkeyup); if (keysi) { int i = 0;