X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=uzbl.c;h=9e833d63e836d72c6597bfa06ac0e378e50639d7;hb=f52c73418f9a68bde9d2668e5215960a0f20cbcf;hp=f4f93eaef90f3ffdc10cbba09f5f64137f745928;hpb=e39152702c839cafe5a73536ba6d3c3d769d4546;p=uzbl-mobile diff --git a/uzbl.c b/uzbl.c index f4f93ea..9e833d6 100644 --- a/uzbl.c +++ b/uzbl.c @@ -65,16 +65,18 @@ Uzbl uzbl; static const GOptionEntry entries[] = { - { "uri", 'u', 0, G_OPTION_ARG_STRING, &uzbl.state.uri, + { "uri", 'u', 0, G_OPTION_ARG_STRING, &uzbl.state.uri, "Uri to load at startup (equivalent to 'set uri = URI')", "URI" }, - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &uzbl.state.verbose, + { "verbose", 'v', 0, G_OPTION_ARG_NONE, &uzbl.state.verbose, "Whether to print all messages or just errors.", NULL }, - { "name", 'n', 0, G_OPTION_ARG_STRING, &uzbl.state.instance_name, + { "name", 'n', 0, G_OPTION_ARG_STRING, &uzbl.state.instance_name, "Name of the current instance (defaults to Xorg window id)", "NAME" }, - { "config", 'c', 0, G_OPTION_ARG_STRING, &uzbl.state.config_file, + { "config", 'c', 0, G_OPTION_ARG_STRING, &uzbl.state.config_file, "Config file (this is pretty much equivalent to uzbl < FILE )", "FILE" }, - { "socket", 's', 0, G_OPTION_ARG_INT, &uzbl.state.socket_id, + { "socket", 's', 0, G_OPTION_ARG_INT, &uzbl.state.socket_id, "Socket ID", "SOCKET" }, + { "geometry", 'g', 0, G_OPTION_ARG_STRING, &uzbl.gui.geometry, + "Set window geometry (format: WIDTHxHEIGHT+-X+-Y)", "GEOMETRY" }, { "version", 'V', 0, G_OPTION_ARG_NONE, &uzbl.behave.print_version, "Print the version and exit", NULL }, { NULL, 0, 0, 0, NULL, NULL, NULL } @@ -141,6 +143,7 @@ const struct { { "max_conns", PTR_V(uzbl.net.max_conns, INT, 1, cmd_max_conns)}, { "max_conns_host", PTR_V(uzbl.net.max_conns_host, INT, 1, cmd_max_conns_host)}, { "useragent", PTR_V(uzbl.net.useragent, STR, 1, cmd_useragent)}, + /* exported WebKitWebSettings properties */ { "zoom_level", PTR_V(uzbl.behave.zoom_level, FLOAT,1, cmd_zoom_level)}, { "font_size", PTR_V(uzbl.behave.font_size, INT, 1, cmd_font_size)}, @@ -627,6 +630,20 @@ scroll_horz(WebKitWebView* page, GArray *argv, GString *result) { } static void +cmd_set_geometry() { + if(!gtk_window_parse_geometry(GTK_WINDOW(uzbl.gui.main_window), uzbl.gui.geometry)) { + if(uzbl.state.verbose) + printf("Error in geometry string: %s\n", uzbl.gui.geometry); + } + /* update geometry var with the actual geometry + this is necessary as some WMs don't seem to honour + the above setting and we don't want to end up with + wrong geometry information + */ + retreive_geometry(); +} + +static void cmd_set_status() { if (!uzbl.behave.show_status) { gtk_widget_hide(uzbl.gui.mainbar); @@ -2010,14 +2027,30 @@ update_title (void) { } static gboolean +configure_event_cb(GtkWidget* window, GdkEventConfigure* event) { + (void) window; + (void) event; + + retreive_geometry(); + return FALSE; +} + +static gboolean key_press_cb (GtkWidget* window, GdkEventKey* event) { //TRUE to stop other handlers from being invoked for the event. FALSE to propagate the event further. (void) window; - if (event->type != GDK_KEY_PRESS || event->keyval == GDK_Page_Up || event->keyval == GDK_Page_Down - || event->keyval == GDK_Up || event->keyval == GDK_Down || event->keyval == GDK_Left || event->keyval == GDK_Right || event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) + if (event->type != GDK_KEY_PRESS || + event->keyval == GDK_Page_Up || + event->keyval == GDK_Page_Down || + event->keyval == GDK_Up || + event->keyval == GDK_Down || + event->keyval == GDK_Left || + event->keyval == GDK_Right || + event->keyval == GDK_Shift_L || + event->keyval == GDK_Shift_R) return FALSE; /* turn off insert mode (if always_insert_mode is not used) */ @@ -2027,7 +2060,11 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) return TRUE; } - if (uzbl.behave.insert_mode && (((event->state & uzbl.behave.modmask) != uzbl.behave.modmask) || (!uzbl.behave.modmask))) + if (uzbl.behave.insert_mode && + ( ((event->state & uzbl.behave.modmask) != uzbl.behave.modmask) || + (!uzbl.behave.modmask) + ) + ) return FALSE; if (event->keyval == GDK_Escape) { @@ -2181,6 +2218,7 @@ GtkWidget* create_window () { gtk_widget_set_name (window, "Uzbl browser"); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (window), "key-press-event", G_CALLBACK (key_press_cb), NULL); + g_signal_connect (G_OBJECT (window), "configure-event", G_CALLBACK (configure_event_cb), NULL); return window; } @@ -2560,11 +2598,26 @@ dump_key_hash(gpointer k, gpointer v, gpointer ud) { } static void -dump_config() { +dump_config() { //ADD "result" var so we can use this with uzblctrl g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); g_hash_table_foreach(uzbl.bindings, dump_key_hash, NULL); } +static void +retreive_geometry() { + int w, h, x, y; + GString *buf = g_string_new(""); + + gtk_window_get_size(GTK_WINDOW(uzbl.gui.main_window), &w, &h); + gtk_window_get_position(GTK_WINDOW(uzbl.gui.main_window), &x, &y); + + g_string_printf(buf, "%dx%d+%d+%d", w, h, x, y); + + if(uzbl.gui.geometry) + g_free(uzbl.gui.geometry); + uzbl.gui.geometry = g_string_free(buf, FALSE); +} + /* set up gtk, gobject, variable defaults and other things that tests and other * external applications need to do anyhow */ void @@ -2613,7 +2666,6 @@ initialize(int argc, char *argv[]) { /* default mode indicators */ uzbl.behave.insert_indicator = g_strdup("I"); uzbl.behave.cmd_indicator = g_strdup("C"); - set_insert_mode(FALSE); uzbl.info.webkit_major = WEBKIT_MAJOR_VERSION; uzbl.info.webkit_minor = WEBKIT_MINOR_VERSION; @@ -2673,10 +2725,16 @@ main (int argc, char* argv[]) { uzbl.gui.bar_h = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_h); gtk_widget_set_scroll_adjustments ((GtkWidget*) uzbl.gui.web_view, uzbl.gui.bar_h, uzbl.gui.bar_v); + if(uzbl.gui.geometry) + cmd_set_geometry(); + else + retreive_geometry(); + gchar *uri_override = (uzbl.state.uri ? g_strdup(uzbl.state.uri) : NULL); gboolean verbose_override = uzbl.state.verbose; settings_init (); + set_insert_mode(FALSE); if (!uzbl.behave.show_status) gtk_widget_hide(uzbl.gui.mainbar);