From: Armaan Bhojwani Date: Sun, 31 Oct 2021 13:22:43 +0000 (-0400) Subject: draft 8 X-Git-Url: https://git.armaanb.net/?p=chorizo.git;a=commitdiff_plain;h=604b3565973dcfd096d522261eed8ff5186af73c draft 8 --- diff --git a/chorizo.h b/chorizo.h index d9e860b..d6913ee 100644 --- a/chorizo.h +++ b/chorizo.h @@ -19,66 +19,57 @@ extern int cooperative_pipe_fp; extern gchar *fifopath; extern char **closed_tabs; extern size_t num_closed; -gboolean isearch_counted_matches(GtkWidget *widget, guint matches, - gpointer data); +gboolean isearch_counted_matches(GtkWidget *widget,guint matches,gpointer data); gboolean quit_if_nothing_active(void); -gboolean remote_msg(GIOChannel *channel, GIOCondition condition, gpointer data); +gboolean remote_msg(GIOChannel *channel,GIOCondition condition,gpointer data); void allocfail(void); -void client_destroy(GtkWidget *widget, gpointer data); +void client_destroy(GtkWidget *widget,gpointer data); typedef struct Client Client; -void set_uri(const char *uri, struct Client *c); -WebKitWebView *client_new(const gchar *uri, WebKitWebView *related_wv); -WebKitWebView *client_new_request(WebKitWebView *web_view, - WebKitNavigationAction *navigation_action, - gpointer data); -void mkdirp(const char *dir, mode_t mode); +void set_uri(const char *uri,struct Client *c); +WebKitWebView *client_new(const gchar *uri,WebKitWebView *related_wv); +WebKitWebView *client_new_request(WebKitWebView *web_view,WebKitNavigationAction *navigation_action,gpointer data); +void mkdirp(const char *dir,mode_t mode); void cooperation_setup(void); -void changed_load_progress(GObject *obj, GParamSpec *pspec, gpointer data); -void changed_favicon(GObject *obj, GParamSpec *pspec, gpointer data); -void changed_title(GObject *obj, GParamSpec *pspec, gpointer data); -void changed_uri(GObject *obj, GParamSpec *pspec, gpointer data); -gboolean crashed_web_view(WebKitWebView *web_view, gpointer data); -gboolean decide_policy(WebKitWebView *web_view, WebKitPolicyDecision *decision, - WebKitPolicyDecisionType type, gpointer data); +void changed_load_progress(GObject *obj,GParamSpec *pspec,gpointer data); +void changed_favicon(GObject *obj,GParamSpec *pspec,gpointer data); +void changed_title(GObject *obj,GParamSpec *pspec,gpointer data); +void changed_uri(GObject *obj,GParamSpec *pspec,gpointer data); +gboolean crashed_web_view(WebKitWebView *web_view,gpointer data); +gboolean decide_policy(WebKitWebView *web_view,WebKitPolicyDecision *decision,WebKitPolicyDecisionType type,gpointer data); gchar *ensure_uri_scheme(const gchar *t); -void grab_feeds_finished(GObject *object, GAsyncResult *result, gpointer data); -void hover_web_view(WebKitWebView *web_view, WebKitHitTestResult *ht, - guint modifiers, gpointer data); -void icon_location(GtkEntry *entry, GtkEntryIconPosition icon_pos, - GdkEvent *event, gpointer data); +void grab_feeds_finished(GObject *object,GAsyncResult *result,gpointer data); +void hover_web_view(WebKitWebView *web_view,WebKitHitTestResult *ht,guint modifiers,gpointer data); +void icon_location(GtkEntry *entry,GtkEntryIconPosition icon_pos,GdkEvent *event,gpointer data); void init_default_web_context(void); -void isearch(gpointer data, gint direction); -void isearch_init(struct Client *c, int direction); +void isearch(gpointer data,gint direction); +void isearch_init(struct Client *c,int direction); void reopen_tab(void); void mainwindow_setup(void); void mainwindow_title(gint idx); -void notebook_switch_page(GtkNotebook *nb, GtkWidget *p, guint idx, - gpointer data); -void show_web_view(WebKitWebView *web_view, gpointer data); +void notebook_switch_page(GtkNotebook *nb,GtkWidget *p,guint idx,gpointer data); +void show_web_view(WebKitWebView *web_view,gpointer data); void trust_user_certs(WebKitWebContext *wc); void version(void); -gboolean download_handle(WebKitDownload *, gchar *, gpointer); -gboolean download_handle(WebKitDownload *download, gchar *suggested_filename, - gpointer data); -void download_click(GtkToolButton *, gpointer); -void download_click(GtkToolButton *tb, gpointer data); -void download_cancel(GtkMenuItem *, gpointer); -void download_cancel(GtkMenuItem *tb, gpointer data); -gboolean downloadmanager_delete(GtkWidget *, gpointer); -gboolean downloadmanager_delete(GtkWidget *obj, gpointer data); +gboolean download_handle(WebKitDownload *,gchar *,gpointer); +gboolean download_handle(WebKitDownload *download,gchar *suggested_filename,gpointer data); +void download_click(GtkToolButton *,gpointer); +void download_click(GtkToolButton *tb,gpointer data); +void download_cancel(GtkMenuItem *,gpointer); +void download_cancel(GtkMenuItem *tb,gpointer data); +gboolean downloadmanager_delete(GtkWidget *,gpointer); +gboolean downloadmanager_delete(GtkWidget *obj,gpointer data); extern gint downloads; -gboolean key_downloadmanager(GtkWidget *widget, GdkEvent *event, gpointer data); -void changed_download_progress(GObject *obj, GParamSpec *pspec, gpointer data); -void download_finished(WebKitDownload *download, gpointer data); -void download_start(WebKitWebView *web_view, WebKitDownload *download, - gpointer data); +gboolean key_downloadmanager(GtkWidget *widget,GdkEvent *event,gpointer data); +void changed_download_progress(GObject *obj,GParamSpec *pspec,gpointer data); +void download_finished(WebKitDownload *download,gpointer data); +void download_start(WebKitWebView *web_view,WebKitDownload *download,gpointer data); typedef struct DownloadItem DownloadItem; const char *download_get_path(struct DownloadItem *payload); -void download_hide(GtkMenuItem *tb, gpointer data); -void download_delete(GtkMenuItem *tb, gpointer data); -void download_copy_url(GtkMenuItem *tb, gpointer data); -void download_copy_path(GtkMenuItem *tb, gpointer data); -void download_xdg_open(GtkMenuItem *tb, gpointer data); +void download_hide(GtkMenuItem *tb,gpointer data); +void download_delete(GtkMenuItem *tb,gpointer data); +void download_copy_url(GtkMenuItem *tb,gpointer data); +void download_copy_path(GtkMenuItem *tb,gpointer data); +void download_xdg_open(GtkMenuItem *tb,gpointer data); void downloadmanager_setup(void); void downloadmanager_show(void); struct Client { @@ -100,13 +91,14 @@ struct DownloadItem { GtkToolButton *tb; WebKitDownload *download; }; -gboolean key_common(GtkWidget *widget, GdkEvent *event, gpointer data); +gboolean key_common(GtkWidget *widget,GdkEvent *event,gpointer data); +void change_tab(int idx,struct Client *c); void reorder_current_tab(int target); -gboolean key_isearch(GtkWidget *widget, GdkEvent *event, gpointer data); -gboolean key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data); -gboolean key_location(GtkWidget *widget, GdkEvent *event, gpointer data); -gboolean key_tablabel(GtkWidget *widget, GdkEvent *event, gpointer data); -gboolean key_web_view(GtkWidget *widget, GdkEvent *event, gpointer data); +gboolean key_isearch(GtkWidget *widget,GdkEvent *event,gpointer data); +gboolean key_wsearch(GtkWidget *widget,GdkEvent *event,gpointer data); +gboolean key_location(GtkWidget *widget,GdkEvent *event,gpointer data); +gboolean key_tablabel(GtkWidget *widget,GdkEvent *event,gpointer data); +gboolean key_web_view(GtkWidget *widget,GdkEvent *event,gpointer data); #define INTERFACE 0 #define EXPORT_INTERFACE 0 #define LOCAL_INTERFACE 0 diff --git a/shortcuts.c b/shortcuts.c index 382e4c0..e881cdc 100644 --- a/shortcuts.c +++ b/shortcuts.c @@ -80,40 +80,33 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data) client_destroy(NULL, c); return TRUE; } else if (GDK_KEY_1 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 0); + change_tab(0, c); return TRUE; } else if (GDK_KEY_2 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 1); + change_tab(1, c); return TRUE; } else if (GDK_KEY_3 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 2); + change_tab(2, c); return TRUE; } else if (GDK_KEY_4 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 3); + change_tab(3, c); return TRUE; } else if (GDK_KEY_5 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 4); + change_tab(4, c); return TRUE; } else if (GDK_KEY_6 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 5); + change_tab(5, c); return TRUE; } else if (GDK_KEY_7 == key) { + change_tab(6, c); gtk_notebook_set_current_page( GTK_NOTEBOOK(mw.notebook), 6); return TRUE; } else if (GDK_KEY_8 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 7); + change_tab(7, c); return TRUE; } else if (GDK_KEY_9 == key) { - gtk_notebook_set_current_page( - GTK_NOTEBOOK(mw.notebook), 8); + change_tab(8, c); return TRUE; } else if (GDK_KEY_u == key) { gtk_notebook_prev_page( @@ -201,6 +194,13 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data) return FALSE; } +void +change_tab(int idx, struct Client *c) +{ + gtk_notebook_set_current_page(GTK_NOTEBOOK(mw.notebook), idx); + gtk_widget_grab_focus(GTK_WIDGET(c->web_view)); +} + void reorder_current_tab(int target) { @@ -245,6 +245,9 @@ key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data) if (key_common(widget, event, data)) return TRUE; if (event->type == GDK_KEY_PRESS) { + guint mask = gtk_accelerator_get_default_mod_mask(); + gboolean shifted = ((((GdkEventKey *)event)->state & mask) == + GDK_SHIFT_MASK); int key = ((GdkEventKey *)event)->keyval; if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) { const gchar *t = @@ -254,10 +257,14 @@ key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data) if (!f) allocfail(); snprintf(f, len + 1, "%s%s", cfg_search_engine, t); - webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view), - f); + if (shifted) { + client_new(f, NULL); + } else { + webkit_web_view_load_uri( + WEBKIT_WEB_VIEW(c->web_view), f); + gtk_widget_grab_focus(c->web_view); + } g_free(f); - gtk_widget_grab_focus(c->web_view); return TRUE; } } @@ -272,12 +279,22 @@ key_location(GtkWidget *widget, GdkEvent *event, gpointer data) if (key_common(widget, event, data)) return TRUE; if (event->type == GDK_KEY_PRESS) { + guint mask = gtk_accelerator_get_default_mod_mask(); + gboolean shifted = ((((GdkEventKey *)event)->state & mask) == + GDK_SHIFT_MASK); int key = ((GdkEventKey *)event)->keyval; + if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) { gtk_widget_grab_focus(c->web_view); t = gtk_entry_get_text(GTK_ENTRY(c->location)); - webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view), - ensure_uri_scheme(t)); + if (shifted) { + switch_tab = TRUE; + client_new(t, NULL); + } else { + webkit_web_view_load_uri( + WEBKIT_WEB_VIEW(c->web_view), + ensure_uri_scheme(t)); + } return TRUE; } else if (GDK_KEY_Escape == key) { t = webkit_web_view_get_uri(