diff options
author | Josh Rickmar <jrick@devio.us> | 2012-07-13 16:49:23 -0400 |
---|---|---|
committer | Josh Rickmar <jrick@devio.us> | 2012-07-13 16:49:23 -0400 |
commit | fb09a625f24b7f18d02a702e251f225348a67601 (patch) | |
tree | 04b774464fff070c665a93a7e05eae2ea20f8a60 /xombrero.c | |
parent | df94016aeecc4512fbc28f1e9d79c7751d6a9488 (diff) | |
download | xombrero-fb09a625f24b7f18d02a702e251f225348a67601.tar.gz |
Make all the statusbar elements GtkLabel widgets instead of GtkEntry
widgets (with the exception of the uri, we need this for the progressbar). Because labels only take up as much room as they need, the statusbar elements now dynamically fit together in a GtkBox instead of giving GtkEntry a fixed size. Because the background color of labels can not be colored directly, place a GtkEventBox underneath the packing GtkBox (which is also transparent) and color that when changing the colors for HTTPS sites.
Diffstat (limited to 'xombrero.c')
-rw-r--r-- | xombrero.c | 133 |
1 files changed, 61 insertions, 72 deletions
diff --git a/xombrero.c b/xombrero.c index ab54bdb..b9dd589 100644 --- a/xombrero.c +++ b/xombrero.c @@ -453,7 +453,7 @@ set_status(struct tab *t, gchar *fmt, ...) status = g_strdup_vprintf(fmt, ap); - gtk_entry_set_text(GTK_ENTRY(t->sbe.statusbar), status); + gtk_entry_set_text(GTK_ENTRY(t->sbe.uri), status); if (!t->status) t->status = status; @@ -1822,12 +1822,7 @@ free_connection_certs(gnutls_x509_crt_t *certs, size_t cert_count) void statusbar_modify_attr(struct tab *t, const char *css_name) { - gtk_widget_set_name(t->sbe.statusbar, css_name); - gtk_widget_set_name(t->sbe.buffercmd, css_name); - gtk_widget_set_name(t->sbe.zoom, css_name); - gtk_widget_set_name(t->sbe.position, css_name); - gtk_widget_set_name(t->sbe.tabs, css_name); - gtk_widget_set_name(t->sbe.proxy, css_name); + gtk_widget_set_name(t->sbe.ebox, css_name); } #else void @@ -1838,19 +1833,9 @@ statusbar_modify_attr(struct tab *t, const char *text, const char *base) gdk_color_parse(text, &c_text); gdk_color_parse(base, &c_base); - gtk_widget_modify_text(t->sbe.statusbar, GTK_STATE_NORMAL, &c_text); - gtk_widget_modify_text(t->sbe.buffercmd, GTK_STATE_NORMAL, &c_text); - gtk_widget_modify_text(t->sbe.zoom, GTK_STATE_NORMAL, &c_text); - gtk_widget_modify_text(t->sbe.position, GTK_STATE_NORMAL, &c_text); - gtk_widget_modify_text(t->sbe.tabs, GTK_STATE_NORMAL, &c_text); - gtk_widget_modify_text(t->sbe.proxy, GTK_STATE_NORMAL, &c_text); - - gtk_widget_modify_base(t->sbe.statusbar, GTK_STATE_NORMAL, &c_base); - gtk_widget_modify_base(t->sbe.buffercmd, GTK_STATE_NORMAL, &c_base); - gtk_widget_modify_base(t->sbe.zoom, GTK_STATE_NORMAL, &c_base); - gtk_widget_modify_base(t->sbe.position, GTK_STATE_NORMAL, &c_base); - gtk_widget_modify_base(t->sbe.tabs, GTK_STATE_NORMAL, &c_base); - gtk_widget_modify_base(t->sbe.proxy, GTK_STATE_NORMAL, &c_base); + gtk_widget_modify_bg(t->sbe.ebox, GTK_STATE_NORMAL, &c_base); + gtk_widget_modify_base(t->sbe.uri, GTK_STATE_NORMAL, &c_base); + gtk_widget_modify_text(t->sbe.uri, GTK_STATE_NORMAL, &c_text); } #endif @@ -2506,9 +2491,9 @@ statusbar_set_visibility(void) TAILQ_FOREACH(t, &tabs, entry){ if (show_statusbar == 0) - gtk_widget_hide(t->statusbar_box); + gtk_widget_hide(t->statusbar); else - gtk_widget_show(t->statusbar_box); + gtk_widget_show(t->statusbar); focus_webview(t); } @@ -2523,17 +2508,17 @@ url_set(struct tab *t, int enable_url_entry) show_url = enable_url_entry; if (enable_url_entry) { - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.uri), GTK_ENTRY_ICON_PRIMARY, NULL); - gtk_entry_set_progress_fraction(GTK_ENTRY(t->sbe.statusbar), 0); + gtk_entry_set_progress_fraction(GTK_ENTRY(t->sbe.uri), 0); } else { pixbuf = gtk_entry_get_icon_pixbuf(GTK_ENTRY(t->uri_entry), GTK_ENTRY_ICON_PRIMARY); progress = gtk_entry_get_progress_fraction(GTK_ENTRY(t->uri_entry)); - gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(t->sbe.uri), GTK_ENTRY_ICON_PRIMARY, pixbuf); - gtk_entry_set_progress_fraction(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_progress_fraction(GTK_ENTRY(t->sbe.uri), progress); } } @@ -3889,10 +3874,10 @@ xt_icon_from_name(struct tab *t, gchar *name) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->uri_entry), GTK_ENTRY_ICON_PRIMARY, "text-html"); if (show_url == 0) - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.uri), GTK_ENTRY_ICON_PRIMARY, "text-html"); else - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.uri), GTK_ENTRY_ICON_PRIMARY, NULL); } @@ -3915,10 +3900,10 @@ xt_icon_from_pixbuf(struct tab *t, GdkPixbuf *pb) /* Minimal tabs. */ if (show_url == 0) { - gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(t->sbe.uri), GTK_ENTRY_ICON_PRIMARY, pb_scaled); } else - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->sbe.uri), GTK_ENTRY_ICON_PRIMARY, NULL); } @@ -4516,7 +4501,7 @@ webview_load_finished_cb(WebKitWebView *wv, WebKitWebFrame *wf, struct tab *t) void webview_progress_changed_cb(WebKitWebView *wv, int progress, struct tab *t) { - gtk_entry_set_progress_fraction(GTK_ENTRY(t->sbe.statusbar), + gtk_entry_set_progress_fraction(GTK_ENTRY(t->sbe.uri), progress == 100 ? 0 : (double)progress / 100); gtk_entry_set_progress_fraction(GTK_ENTRY(t->uri_entry), progress == 100 ? 0 : (double)progress / 100); @@ -5723,7 +5708,7 @@ buffercmd_abort(struct tab *t) bcmd[i] = '\0'; cmd_prefix = 0; /* clear prefix for non-buffer commands */ - gtk_entry_set_text(GTK_ENTRY(t->sbe.buffercmd), bcmd); + gtk_label_set_text(GTK_LABEL(t->sbe.buffercmd), bcmd); } void @@ -5788,7 +5773,7 @@ buffercmd_addkey(struct tab *t, guint keyval) return (XT_CB_HANDLED); } - gtk_entry_set_text(GTK_ENTRY(t->sbe.buffercmd), bcmd); + gtk_label_set_text(GTK_LABEL(t->sbe.buffercmd), bcmd); /* find exact match */ for (i = 0; i < LENGTH(buffercmds); i++) @@ -6840,7 +6825,7 @@ update_statusbar_position(GtkAdjustment* adjustment, gpointer data) else position = g_strdup_printf("%d%%", (int) ((value / max) * 100)); - gtk_entry_set_text(GTK_ENTRY(t->sbe.position), position); + gtk_label_set_text(GTK_LABEL(t->sbe.position), position); g_free(position); return (TRUE); @@ -7108,7 +7093,7 @@ update_statusbar_tabs(struct tab *t) t = get_current_tab(); if (t != NULL) - gtk_entry_set_text(GTK_ENTRY(t->sbe.tabs), s); + gtk_label_set_text(GTK_LABEL(t->sbe.tabs), s); } /* after active tab change */ @@ -7289,7 +7274,7 @@ update_statusbar_zoom(struct tab *t) g_object_get(G_OBJECT(t->wv), "zoom-level", &zoom, (char *)NULL); if ((zoom <= 0.99 || zoom >= 1.01)) snprintf(s, sizeof s, "%d%%", (int)(zoom * 100)); - gtk_entry_set_text(GTK_ENTRY(t->sbe.zoom), s); + gtk_label_set_text(GTK_LABEL(t->sbe.zoom), s); } void @@ -7352,25 +7337,20 @@ append_tab(struct tab *t) } GtkWidget * -create_sbe(int width) +create_sbe(void) { GtkWidget *sbe; - sbe = gtk_entry_new(); - gtk_entry_set_inner_border(GTK_ENTRY(sbe), NULL); - gtk_entry_set_has_frame(GTK_ENTRY(sbe), FALSE); + sbe = gtk_label_new(NULL); gtk_widget_set_can_focus(GTK_WIDGET(sbe), FALSE); gtk_widget_modify_font(GTK_WIDGET(sbe), statusbar_font); - gtk_entry_set_alignment(GTK_ENTRY(sbe), 1.0); - gtk_widget_set_size_request(sbe, width, -1); - return (sbe); } int -add_sbe(struct tab *t, char flag, int *used, GtkWidget *sbe) +add_sbe(GtkWidget *box, char flag, int *used, GtkWidget *sbe) { - if (t == NULL || used == NULL || sbe == NULL) { + if (box == NULL || used == NULL || sbe == NULL) { DPRINTF("%s: invalid parameters", __func__); return (1); } @@ -7381,8 +7361,7 @@ add_sbe(struct tab *t, char flag, int *used, GtkWidget *sbe) return (1); } - gtk_box_pack_start(GTK_BOX(t->statusbar_box), - sbe, FALSE, FALSE, FALSE); + gtk_box_pack_start(GTK_BOX(box), sbe, FALSE, FALSE, 0); *used = 1; return (0); @@ -7391,8 +7370,9 @@ add_sbe(struct tab *t, char flag, int *used, GtkWidget *sbe) int statusbar_create(struct tab *t) { - char *p; + GtkWidget *box; /* container for statusbar elems */ GtkWidget *sep; + char *p; int sbe_P = 0, sbe_B = 0, sbe_Z = 0, sbe_T = 0, sbe_p = 0; #if !GTK_CHECK_VERSION(3, 0, 0) @@ -7405,24 +7385,36 @@ statusbar_create(struct tab *t) } #if GTK_CHECK_VERSION(3, 0, 0) - t->statusbar_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); - gtk_widget_set_name(GTK_WIDGET(t->statusbar_box), "statusbar"); + t->statusbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_widget_set_name(GTK_WIDGET(t->statusbar), "statusbar"); #else - t->statusbar_box = gtk_hbox_new(FALSE, 0); + t->statusbar = gtk_hbox_new(FALSE, 0); + box = gtk_hbox_new(FALSE, 0); #endif + t->sbe.ebox = gtk_event_box_new(); - t->sbe.statusbar = gtk_entry_new(); - gtk_entry_set_inner_border(GTK_ENTRY(t->sbe.statusbar), NULL); - gtk_entry_set_has_frame(GTK_ENTRY(t->sbe.statusbar), FALSE); - gtk_widget_set_can_focus(GTK_WIDGET(t->sbe.statusbar), FALSE); - gtk_widget_modify_font(GTK_WIDGET(t->sbe.statusbar), statusbar_font); + gtk_widget_set_can_focus(GTK_WIDGET(t->statusbar), FALSE); + gtk_widget_set_can_focus(GTK_WIDGET(t->sbe.ebox), FALSE); + gtk_widget_set_can_focus(GTK_WIDGET(box), FALSE); + + gtk_box_set_spacing(GTK_BOX(box), 10); + gtk_box_pack_start(GTK_BOX(t->statusbar), t->sbe.ebox, TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(t->sbe.ebox), box); /* create these widgets only if specified in statusbar_elems */ - t->sbe.position = create_sbe(40); - t->sbe.zoom = create_sbe(40); - t->sbe.buffercmd = create_sbe(60); - t->sbe.tabs = create_sbe(40); - t->sbe.proxy = create_sbe(60); + t->sbe.uri = gtk_entry_new(); + gtk_widget_set_can_focus(GTK_WIDGET(t->sbe.uri), FALSE); + gtk_widget_modify_font(GTK_WIDGET(t->sbe.uri), statusbar_font); +#if !GTK_CHECK_VERSION(3, 0, 0) + gtk_entry_set_inner_border(GTK_ENTRY(t->sbe.uri), NULL); + gtk_entry_set_has_frame(GTK_ENTRY(t->sbe.uri), FALSE); +#endif + t->sbe.position = create_sbe(); + t->sbe.zoom = create_sbe(); + t->sbe.buffercmd = create_sbe(); + t->sbe.tabs = create_sbe(); + t->sbe.proxy = create_sbe(); #if GTK_CHECK_VERSION(3, 0, 0) statusbar_modify_attr(t, XT_CSS_NORMAL); @@ -7430,8 +7422,7 @@ statusbar_create(struct tab *t) statusbar_modify_attr(t, XT_COLOR_WHITE, XT_COLOR_BLACK); #endif - gtk_box_pack_start(GTK_BOX(t->statusbar_box), t->sbe.statusbar, TRUE, - TRUE, FALSE); + gtk_box_pack_start(GTK_BOX(box), t->sbe.uri, TRUE, TRUE, 0); /* * gtk widgets cannot be added to a box twice. The sbe_* variables @@ -7447,27 +7438,25 @@ statusbar_create(struct tab *t) gdk_color_parse(XT_COLOR_SB_SEPARATOR, &color); gtk_widget_modify_bg(sep, GTK_STATE_NORMAL, &color); #endif - gtk_box_pack_start(GTK_BOX(t->statusbar_box), sep, - FALSE, FALSE, FALSE); + gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); break; case 'P': - add_sbe(t, *p, &sbe_P, t->sbe.position); + add_sbe(box, *p, &sbe_P, t->sbe.position); break; case 'B': - add_sbe(t, *p, &sbe_B, t->sbe.buffercmd); + add_sbe(box, *p, &sbe_B, t->sbe.buffercmd); break; case 'Z': - add_sbe(t, *p, &sbe_Z, t->sbe.zoom); + add_sbe(box, *p, &sbe_Z, t->sbe.zoom); break; case 'T': - add_sbe(t, *p, &sbe_T, t->sbe.tabs); + add_sbe(box, *p, &sbe_T, t->sbe.tabs); break; case 'p': - if (add_sbe(t, *p, &sbe_p, t->sbe.proxy) == 0) { + if (add_sbe(box, *p, &sbe_p, t->sbe.proxy) == 0) if (proxy_uri) gtk_entry_set_text( GTK_ENTRY(t->sbe.proxy), "proxy"); - } break; default: warnx("illegal flag \"%c\" in statusbar_elems\n", *p); @@ -7475,7 +7464,7 @@ statusbar_create(struct tab *t) } } - gtk_box_pack_end(GTK_BOX(t->vbox), t->statusbar_box, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(t->vbox), t->statusbar, FALSE, FALSE, 0); return (0); } |