diff options
author | Brendan Taylor <whateley@gmail.com> | 2011-07-12 21:32:50 +0000 |
---|---|---|
committer | Brendan Taylor <whateley@gmail.com> | 2011-07-12 21:39:35 +0000 |
commit | 44e34a87ca6fc496d9c0a55a40dec98be27d52f6 (patch) | |
tree | 8e1dc09ab7516ab2617b1df7f1ddb243857056de | |
parent | fc9604fa60645fe7c6129a76bee273bb501b88e6 (diff) | |
parent | c08cce6f0a92c42c71da012dd38b9f54078a0b06 (diff) |
Merge branch 'tailhook/wm-integ' into experimental
Conflicts:
src/callbacks.c
src/callbacks.h
src/uzbl-core.c
-rw-r--r-- | README | 18 | ||||
-rw-r--r-- | src/uzbl-core.c | 15 | ||||
-rw-r--r-- | src/uzbl-core.h | 1 | ||||
-rw-r--r-- | src/variables.c | 33 | ||||
-rw-r--r-- | src/variables.h | 1 |
5 files changed, 59 insertions, 9 deletions
@@ -300,6 +300,7 @@ file). expanded). * `title_format_short`: titlebar string when statusbar shown (will be expanded). * `icon`: path to icon for Gtk. +* `window_role`: Window role string. By default there is no role. * `forward_keys`: Whether `uzbl-core` should send key events to the webkit view. * `cookie_handler`: Handler called when the page requests a cookie to be retrieved or set. Appends the following arguments to the standard handler @@ -610,6 +611,21 @@ This script tries to authenticate as user alice with password wonderland once and never retries authentication. See examples for more sofisticated, interactive authentication handler. +### WINDOW MANAGER INTEGRATION + +As mentined before, the contents of the window title can be customized by +setting the `title_format_short` variable and the `title_format_long` variable +(see above to figure out when each of them is used). You can also set `icon` +variable to path of the icon file. Some advanced window managers can also take +`WM_WINDOW_ROLE` in account, which can be set by modifying `window_role` +variable. + +There is currently no support of updating window icon automatically to site's +favicon, but there are some scripts for that at wiki pages. + +Uzbl sets special X window property UZBL_URI which is always the uri of the +page loaded into uzbl, except for web inspector windows which has no UZBL_URI. + ### EVENTS Unlike commands, events are not handled in `uzbl` itself, but are propagated @@ -626,7 +642,7 @@ The EM allows: * Many fine-grained events (`hover_over_link`, `key_press`, `key_release`,..) * See example `uzbl-event-manager`. -**Note**: Cookie events are sent in addition to (optionally) being handled by +**Note**: Cookie events are sent in addition to (optionally) being handled by the cookie handler (set by the cookie_handler var). If using a handler it will take precedence before the internal state configured by (add|delete)_cookie commands. diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 4965d8f..22a0dda 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -883,7 +883,7 @@ settings_init () { State* s = &uzbl.state; Network* n = &uzbl.net; int i; - + /* Load default config */ for (i = 0; default_config[i].command != NULL; i++) { parse_cmd_line(default_config[i].command, NULL); @@ -1082,7 +1082,6 @@ main (int argc, char* argv[]) { if (uzbl.state.plug_mode) { uzbl.gui.plug = create_plug(); gtk_container_add (GTK_CONTAINER (uzbl.gui.plug), uzbl.gui.vbox); - gtk_widget_show_all (GTK_WIDGET (uzbl.gui.plug)); /* in xembed mode the window has no unique id and thus * socket/fifo names aren't unique either. * we use a custom randomizer to create a random id @@ -1092,12 +1091,13 @@ main (int argc, char* argv[]) { srand((unsigned int)tv.tv_sec*tv.tv_usec); uzbl.xwin = rand(); } - + /* Windowed mode */ else { uzbl.gui.main_window = create_window(); gtk_container_add (GTK_CONTAINER (uzbl.gui.main_window), uzbl.gui.vbox); - gtk_widget_show_all (uzbl.gui.main_window); + /* We need to ensure there is a window, before we can get XID */ + gtk_widget_realize (GTK_WIDGET (uzbl.gui.main_window)); uzbl.xwin = GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window))); @@ -1172,6 +1172,13 @@ main (int argc, char* argv[]) { g_free(uri_override); } + /* Finally show the window */ + if (uzbl.gui.main_window) { + gtk_widget_show_all (uzbl.gui.main_window); + } else { + gtk_widget_show_all (GTK_WIDGET (uzbl.gui.plug)); + } + /* Verbose feedback */ if (uzbl.state.verbose) { printf("Uzbl start location: %s\n", argv[0]); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index ae0fe49..db9c32e 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -75,6 +75,7 @@ typedef struct { WebKitWebView* web_view; gchar* main_title; gchar* icon; + gchar* window_role; /* WebInspector */ GtkWidget* inspector_window; diff --git a/src/variables.c b/src/variables.c index 5b717d9..529a850 100644 --- a/src/variables.c +++ b/src/variables.c @@ -45,6 +45,7 @@ const struct var_name_to_ptr_t { { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)}, { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)}, { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, + { "window_role", PTR_V_STR(uzbl.gui.window_role, 1, set_window_role)}, { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, { "authentication_handler", PTR_V_STR(uzbl.behave.authentication_handler, 1, set_authentication_handler)}, { "scheme_handler", PTR_V_STR(uzbl.behave.scheme_handler, 1, NULL)}, @@ -277,11 +278,20 @@ view_settings() { void uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec) { - (void) param_spec; + (void) param_spec; - g_free (uzbl.state.uri); - g_object_get (web_view, "uri", &uzbl.state.uri, NULL); - g_setenv("UZBL_URI", uzbl.state.uri, TRUE); + g_free (uzbl.state.uri); + g_object_get (web_view, "uri", &uzbl.state.uri, NULL); + g_setenv("UZBL_URI", uzbl.state.uri, TRUE); + + gdk_property_change( + gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), + gdk_atom_intern_static_string("UZBL_URI"), + gdk_atom_intern_static_string("STRING"), + 8, + GDK_PROP_MODE_REPLACE, + (unsigned char *)uzbl.state.uri, + strlen(uzbl.state.uri)); } void @@ -330,6 +340,15 @@ cmd_load_uri() { soup_uri_free(soup_uri); } + gdk_property_change( + gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), + gdk_atom_intern_static_string("UZBL_URI"), + gdk_atom_intern_static_string("STRING"), + 8, + GDK_PROP_MODE_REPLACE, + (unsigned char *)newuri, + strlen(newuri)); + webkit_web_view_load_uri (uzbl.gui.web_view, newuri); g_free (newuri); } @@ -479,6 +498,12 @@ set_icon() { } void +set_window_role() { + if (uzbl.gui.main_window) + gtk_window_set_role(GTK_WINDOW (uzbl.gui.main_window), uzbl.gui.window_role); +} + +void cmd_set_geometry() { int ret=0, x=0, y=0; unsigned int w=0, h=0; diff --git a/src/variables.h b/src/variables.h index 035c500..22756eb 100644 --- a/src/variables.h +++ b/src/variables.h @@ -58,6 +58,7 @@ void cmd_enforce_96dpi(); void cmd_inject_html(); void cmd_caret_browsing(); void cmd_javascript_windows(); +void set_window_role(); void cmd_set_geometry(); void cmd_view_source(); void cmd_scrollbars_visibility(); |