diff options
-rw-r--r-- | about.c | 288 | ||||
-rw-r--r-- | freebsd/Makefile | 2 | ||||
-rw-r--r-- | xombrero.c | 39 | ||||
-rw-r--r-- | xombrero.h | 4 |
4 files changed, 118 insertions, 215 deletions
diff --git a/about.c b/about.c index 861e7d2..db76510 100644 --- a/about.c +++ b/about.c @@ -85,8 +85,6 @@ void update_cookie_tabs(struct tab *apart_from); int about_webkit(struct tab *, struct karg *); int allthethings(struct tab *, struct karg *); -extern SoupSession *session; - struct about_type about_list[] = { { XT_URI_ABOUT_ABOUT, xtp_page_ab }, { XT_URI_ABOUT_ALLTHETHINGS, allthethings }, @@ -1974,117 +1972,28 @@ startpage_add(const char *fmt, ...) TAILQ_INSERT_TAIL(&spl, s, entry); } -gchar *show_g_object_settings(GObject *, char *, int); - -char * -xt_g_object_serialize(GValue *value, const gchar *tname, char *str, int recurse) -{ - int typeno = 0; - char *valstr, *tmpstr, *tmpsettings; - GObject *object; - - typeno = G_TYPE_FUNDAMENTAL( G_VALUE_TYPE(value) ); - switch ( typeno ) { - case G_TYPE_ENUM: - valstr = g_strdup_printf("%d", - g_value_get_enum(value)); - break; - case G_TYPE_CHAR: - valstr = g_strdup_printf("%c", - g_value_get_schar(value)); - break; - case G_TYPE_UCHAR: - valstr = g_strdup_printf("%c", - g_value_get_uchar(value)); - break; - case G_TYPE_LONG: - valstr = g_strdup_printf("%ld", - g_value_get_long(value)); - break; - case G_TYPE_ULONG: - valstr = g_strdup_printf("%ld", - g_value_get_ulong(value)); - break; - case G_TYPE_INT: - valstr = g_strdup_printf("%d", - g_value_get_int(value)); - break; - case G_TYPE_INT64: - valstr = g_strdup_printf("%" PRIo64, - (int64_t) g_value_get_int64(value)); - break; - case G_TYPE_UINT: - valstr = g_strdup_printf("%d", - g_value_get_uint(value)); - break; - case G_TYPE_UINT64: - valstr = g_strdup_printf("%" PRIu64, - (uint64_t) g_value_get_uint64(value)); - break; - case G_TYPE_FLAGS: - valstr = g_strdup_printf("0x%x", - g_value_get_flags(value)); - break; - case G_TYPE_BOOLEAN: - valstr = g_strdup_printf("%s", - g_value_get_boolean(value) ? "TRUE" : "FALSE"); - break; - case G_TYPE_FLOAT: - valstr = g_strdup_printf("%f", - g_value_get_float(value)); - break; - case G_TYPE_DOUBLE: - valstr = g_strdup_printf("%f", - g_value_get_double(value)); - break; - case G_TYPE_STRING: - valstr = g_strdup_printf("\"%s\"", - g_value_get_string(value)); - break; - case G_TYPE_POINTER: - valstr = g_strdup_printf("%p", - g_value_get_pointer(value)); - break; - case G_TYPE_OBJECT: - object = g_value_get_object(value); - if (object != NULL) { - if (recurse) { - tmpstr = g_strdup_printf("%s ", str); - tmpsettings = show_g_object_settings( object, - tmpstr, recurse); - g_free(tmpstr); - - if (strrchr(tmpsettings, '\n') != NULL) { - valstr = g_strdup_printf("%s%s }", - tmpsettings, str); - g_free(tmpsettings); - } else { - valstr = tmpsettings; - } - } else { - valstr = g_strdup_printf("<...>"); - } - } else { - valstr = g_strdup_printf("settings[] = NULL"); - } - break; - default: - valstr = g_strdup_printf("type %s unhandled", tname); - } - return valstr; -} gchar * show_g_object_settings(GObject *o, char *str, int recurse) { - char *b, *p, *body, *valstr, *tmpstr; + char *b, *body, *valstr; guint n_props = 0; - int i, typeno = 0; + int i; GParamSpec *pspec; const gchar *tname; GValue value; + int typeno; + const gchar *string; + gboolean boolean; + gfloat fp; + gdouble fpd; + gint number; + guint unumber; + int64_t number64; + uint64_t unumber64; + GObject *object; GParamSpec **proplist; - const gchar *name; + char *tmpstr, *tmpsettings; if (!G_IS_OBJECT(o)) { fprintf(stderr, "%s is not a g_object\n", str); @@ -2092,18 +2001,7 @@ show_g_object_settings(GObject *o, char *str, int recurse) } proplist = g_object_class_list_properties( G_OBJECT_GET_CLASS(o), &n_props); - - if (GTK_IS_WIDGET(o)) { - name = gtk_widget_get_name(GTK_WIDGET(o)); - } else { - name = "settings"; - } - if (n_props == 0) { - body = g_strdup_printf("%s[0] = { }", name); - goto end_show_g_objects; - } - - body = g_strdup_printf("%s[%d] = {\n", name, n_props); + body = g_strdup_printf("%s: %3d settings\n", str, n_props); for (i=0; i < n_props; i++) { pspec = proplist[i]; tname = G_OBJECT_TYPE_NAME(pspec); @@ -2116,66 +2014,101 @@ show_g_object_settings(GObject *o, char *str, int recurse) g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec)); g_object_get_property(G_OBJECT(o), pspec->name, &value); - typeno = G_TYPE_FUNDAMENTAL( G_VALUE_TYPE(&value) ); } /* based on the type, recurse and display values */ if (valstr == NULL) { - valstr = xt_g_object_serialize(&value, tname, str, - recurse); + typeno = G_TYPE_FUNDAMENTAL( G_VALUE_TYPE(&value) ); + switch ( typeno ) { + case G_TYPE_ENUM: + number = g_value_get_enum(&value); + valstr = g_strdup_printf("%d", number); + break; + case G_TYPE_INT: + number = g_value_get_int(&value); + valstr = g_strdup_printf("%d", number); + break; + case G_TYPE_INT64: + number64 = (int64_t)g_value_get_int64(&value); + valstr = g_strdup_printf("%" PRIo64, number64); + break; + case G_TYPE_UINT: + unumber = g_value_get_uint(&value); + valstr = g_strdup_printf("%d", unumber); + break; + case G_TYPE_UINT64: + unumber64 = + (uint64_t)g_value_get_uint64(&value); + valstr = + g_strdup_printf("%" PRIu64, unumber64); + break; + case G_TYPE_FLAGS: + unumber = g_value_get_flags(&value); + valstr = g_strdup_printf("0x%x", unumber); + break; + case G_TYPE_BOOLEAN: + boolean = g_value_get_boolean(&value); + valstr = g_strdup_printf("%s", + boolean ? "TRUE" : "FALSE"); + break; + case G_TYPE_FLOAT: + fp = g_value_get_float(&value); + valstr = g_strdup_printf("%f", fp); + break; + case G_TYPE_DOUBLE: + fpd = g_value_get_double(&value); + valstr = g_strdup_printf("%f", fpd); + break; + case G_TYPE_STRING: + string = g_value_get_string(&value); + valstr = g_strdup_printf("\"%s\"", + string); + break; + case G_TYPE_OBJECT: + object = g_value_get_object(&value); + if (object != NULL) { + if (recurse) { + tmpstr = g_strdup_printf("%s ", + str); + tmpsettings = show_g_object_settings( + object, tmpstr, recurse); + valstr = g_strdup_printf( + "{\n%s%s }\n", + tmpsettings, str); + g_free(tmpstr); + g_free(tmpsettings); + } else { + valstr = g_strdup_printf("<...>"); + } + } else { + valstr = g_strdup_printf("NULL"); + } + break; + default: + valstr = g_strdup_printf( + "type %s unhandled", + tname); + } } - tmpstr = g_strdup_printf("%-13s %s%s%s,", tname, pspec->name, - (typeno == G_TYPE_OBJECT) ? "." : " = ", valstr); b = body; - -#define XT_G_OBJECT_SPACING 50 - p = strrchr(tmpstr, '\n'); - if (p == NULL && strlen(tmpstr) > XT_G_OBJECT_SPACING) { - body = g_strdup_printf( - "%s%s %-50s\n%s %50s /* %3d flags=0x%08x */\n", - body, str, tmpstr, str, "", i, pspec->flags); - } else { - char *fmt; - int strspaces; - if (p == NULL) - strspaces = XT_G_OBJECT_SPACING; - else - strspaces = strlen(tmpstr) - (strlen(p) - strlen(str)) + XT_G_OBJECT_SPACING + 5; - fmt = g_strdup_printf("%%s%%s %%-%ds /* %%3d flags=0x%%08x */\n", strspaces); - body = g_strdup_printf(fmt, body, str, tmpstr, i, pspec->flags); - g_free(fmt); - } - g_free(tmpstr); + body = g_strdup_printf( + "%s%s: %3d: flags=0x%08x, %-13s %s = %s\n", + body, str, i, pspec->flags, tname, pspec->name, + valstr); g_free(b); g_free(valstr); } -end_show_g_objects: g_free(proplist); return (body); } -char * -xt_append_settings(char *str, GObject *object, char *name, int recurse) -{ - char *newstr, *settings; - - settings = show_g_object_settings(object, name, recurse); - if (str == NULL) - str = g_strdup(""); - - newstr = g_strdup_printf("%s%s %s%s };\n", str, name, settings, name); - g_free(str); - - return newstr; -} - int about_webkit(struct tab *t, struct karg *arg) { char *page, *body, *settingstr; - settingstr = xt_append_settings(NULL, G_OBJECT(t->settings), + settingstr = show_g_object_settings(G_OBJECT(t->settings), "t->settings", 0); body = g_strdup_printf("<pre>%s</pre>\n", settingstr); g_free(settingstr); @@ -2189,38 +2122,25 @@ about_webkit(struct tab *t, struct karg *arg) return (0); } -static int toplevelcount = 0; - -void -xt_append_toplevel(GtkWindow *w, char **body) -{ - char *n; - - n = g_strdup_printf("toplevel#%d", toplevelcount++); - *body = xt_append_settings(*body, G_OBJECT(w), n, 0); - g_free(n); -} - int allthethings(struct tab *t, struct karg *arg) { - GList *list; - char *page, *body, *b; + char *page, *body, *b, *settingstr; + extern GtkWidget *main_window; - body = xt_append_settings(NULL, G_OBJECT(t->wv), "t->wv", 1); - body = xt_append_settings(body, G_OBJECT(t->inspector), + body = show_g_object_settings(G_OBJECT(t->wv), "t->wv", 1); + b = body; + settingstr = show_g_object_settings(G_OBJECT(t->inspector), "t->inspector", 1); -#if 0 /* not until warnings are gone */ - body = xt_append_settings(body, G_OBJECT(session), - "session", 1); -#endif - toplevelcount = 0; - list = gtk_window_list_toplevels(); - g_list_foreach(list, (GFunc)g_object_ref, NULL); - g_list_foreach(list, (GFunc)xt_append_toplevel, &body); - g_list_foreach(list, (GFunc)g_object_unref, NULL); - g_list_free(list); - + body = g_strdup_printf("%s%s", body, settingstr); + g_free(b); + g_free(settingstr); + b = body; + settingstr = show_g_object_settings(G_OBJECT(main_window), + "main_window", 1); + body = g_strdup_printf("%s%s", body, settingstr); + g_free(b); + g_free(settingstr); b = body; body = g_strdup_printf("<pre>%scan paste clipboard = %d\n</pre>", body, webkit_web_view_can_paste_clipboard(t->wv)); diff --git a/freebsd/Makefile b/freebsd/Makefile index cf65ea8..011354c 100644 --- a/freebsd/Makefile +++ b/freebsd/Makefile @@ -9,7 +9,7 @@ LIBS+= libsoup-2.4 gnutls gthread-2.0 LDADD= -lutil -lgcrypt GTK_CFLAGS!= pkg-config --cflags $(LIBS) GTK_LDFLAGS!= pkg-config --libs $(LIBS) -CFLAGS+= $(GTK_CFLAGS) -O2 -Wall -pthread -I. -I.. +CFLAGS+= $(GTK_CFLAGS) -O2 -Wall -pthread LDFLAGS+= $(GTK_LDFLAGS) -pthread PREFIX?= /usr/local diff --git a/xombrero.c b/xombrero.c index 913e183..214b104 100644 --- a/xombrero.c +++ b/xombrero.c @@ -6610,6 +6610,7 @@ cmd_keypress_cb(GtkEntry *w, GdkEventKey *e, struct tab *t) /* FALLTHROUGH */ case GDK_Escape: hide_cmd(t); + focus_webview(t); /* cancel search */ if (c != NULL && (c[0] == '/' || c[0] == '?')) @@ -6700,21 +6701,12 @@ cmd_focusout_cb(GtkWidget *w, GdkEventFocus *e, struct tab *t) hide_oops(t); disable_hints(t); - return (XT_CB_PASSTHROUGH); -} - -void -cmd_hide_cb(GtkWidget *w, struct tab *t) -{ - if (t == NULL) { - show_oops(NULL, "%s: invalid parameters", __func__); - return; - } - if (show_url == 0 || t->focus_wv) focus_webview(t); else gtk_widget_grab_focus(GTK_WIDGET(t->uri_entry)); + + return (XT_CB_PASSTHROUGH); } void @@ -7332,8 +7324,6 @@ delete_tab(struct tab *t) gtk_widget_destroy(t->js_toggle); } - g_object_unref(t->completion); - gtk_widget_destroy(t->tab_elems.eventbox); gtk_widget_destroy(t->vbox); @@ -7775,7 +7765,6 @@ create_new_tab(char *title, struct undo *u, int focus, int position) "signal::focus-out-event", G_CALLBACK(cmd_focusout_cb), t, "signal::activate", G_CALLBACK(cmd_activate_cb), t, "signal::populate-popup", G_CALLBACK(cmd_popup_cb), t, - "signal::hide", G_CALLBACK(cmd_hide_cb), t, (char *)NULL); /* reuse wv_button_cb to hide oops */ @@ -7839,7 +7828,10 @@ create_new_tab(char *title, struct undo *u, int focus, int position) } else webkit_web_back_forward_list_clear(t->bfl); - /* check and show url and statusbar */ + /* hide stuff */ + hide_cmd(t); + hide_oops(t); + hide_buffers(t); url_set_visibility(); statusbar_set_visibility(); @@ -7890,7 +7882,6 @@ notebook_switchpage_cb(GtkNotebook *nb, GtkWidget *nbp, guint pn, hide_cmd(t); hide_oops(t); - hide_buffers(t); if (t->focus_wv) { /* can't use focus_webview here */ @@ -7931,13 +7922,6 @@ menuitem_response(struct tab *t) gtk_notebook_set_current_page(notebook, t->tab_id); } -int -destroy_menu(GtkWidget *w, GdkEventFocus *e, void *notused) -{ - gtk_widget_destroy(w); - return (XT_CB_PASSTHROUGH); -} - gboolean arrow_cb(GtkWidget *w, GdkEventButton *event, gpointer user_data) { @@ -7972,9 +7956,12 @@ arrow_cb(GtkWidget *w, GdkEventButton *event, gpointer user_data) gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time); - g_object_connect(G_OBJECT(menu), - "signal::hide", G_CALLBACK(destroy_menu), NULL, - (char *)NULL); + /* unref object so it'll free itself when popped down */ +#if !GTK_CHECK_VERSION(3, 0, 0) + /* XXX does not need unref with gtk+3? */ + g_object_ref_sink(menu); + g_object_unref(menu); +#endif return (TRUE /* eat event */); } diff --git a/xombrero.h b/xombrero.h index 20efb34..d5da4d9 100644 --- a/xombrero.h +++ b/xombrero.h @@ -48,8 +48,6 @@ u_int32_t arc4random_uniform(u_int32_t); #include <sys/tree.h> #include <X11/Xlib.h> #include <sys/un.h> -#include <sys/param.h> -#define LOGIN_NAME_MAX MAXLOGNAME #elif defined(__OpenBSD__) #include <util.h> #include <sys/tree.h> @@ -926,8 +924,6 @@ extern SoupSession *session; extern GtkNotebook *notebook; extern GtkListStore *completion_model; extern uint64_t blocked_cookies; -extern GtkWidget *main_window; -extern SoupSession *session; extern void (*_soup_cookie_jar_add_cookie)(SoupCookieJar *, SoupCookie *); |