From 1661e0380ec0a37b04d33f9a487c9b2c0047b05a Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 22 Apr 2021 03:35:14 +0200 Subject: about-dialog: Auto-switch, use gtk_window_close gtk_widget_destroy on about_dialog shouldn't SEGV but it does on GTK+ 3.24.26 --- keybindings.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'keybindings.c') diff --git a/keybindings.c b/keybindings.c index bfc8f7a..ad704d1 100644 --- a/keybindings.c +++ b/keybindings.c @@ -14,9 +14,9 @@ about_dialogCb_activate_link(GtkAboutDialog *about_dialog, gchar *uri, gpointer (void)about_dialog; struct Window *window = (struct Window *)user_data; - badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, uri, NULL), FALSE); + badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, uri, NULL), TRUE); - gtk_widget_destroy(GTK_WIDGET(about_dialog)); + gtk_window_close(GTK_WINDOW(about_dialog)); return TRUE; } -- cgit v1.3.1-23-gd82d From 6ee5839da2515bd3d44f549b10da4363b48ae685 Mon Sep 17 00:00:00 2001 From: "striker.sh" Date: Fri, 5 Feb 2021 20:37:24 +0100 Subject: Close tab when releasing middle mouse click --- badwolf.c | 17 ++++++++++++++--- interface.txt | 4 +++- keybindings.c | 14 ++++++++++++++ keybindings.h | 2 ++ 4 files changed, 33 insertions(+), 4 deletions(-) (limited to 'keybindings.c') diff --git a/badwolf.c b/badwolf.c index aea2bbc..1202944 100644 --- a/badwolf.c +++ b/badwolf.c @@ -165,16 +165,23 @@ badwolf_new_tab_box(const gchar *title, struct Client *browser) GtkWidget *tab_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_name(tab_box, "browser__tabbox"); + GtkWidget *close = gtk_button_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_widget_set_name(close, "browser__tabbox__close"); GtkWidget *label = gtk_label_new(title); gtk_widget_set_name(label, "browser__tabbox__label"); + GtkWidget *label_event_box = gtk_event_box_new(); + gtk_container_add(GTK_CONTAINER(label_event_box), label); GtkWidget *context_label = gtk_label_new(context_id_str); gtk_widget_set_name(context_label, "browser__tabbox__context_label"); + GtkWidget *context_label_event_box = gtk_event_box_new(); + gtk_container_add(GTK_CONTAINER(context_label_event_box), context_label); GtkWidget *playing = gtk_image_new_from_icon_name("audio-volume-high-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_name(playing, "browser__tabbox__playing"); + GtkWidget *playing_event_box = gtk_event_box_new(); + gtk_container_add(GTK_CONTAINER(playing_event_box), playing); #ifdef BADWOLF_TAB_BOX_WIDTH gtk_widget_set_size_request(label, BADWOLF_TAB_BOX_WIDTH, -1); @@ -188,9 +195,9 @@ badwolf_new_tab_box(const gchar *title, struct Client *browser) gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE); gtk_label_set_single_line_mode(GTK_LABEL(context_label), TRUE); - gtk_box_pack_start(GTK_BOX(tab_box), context_label, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(tab_box), playing, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(tab_box), label, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(tab_box), context_label_event_box, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(tab_box), playing_event_box, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(tab_box), label_event_box, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(tab_box), close, FALSE, FALSE, 0); gtk_button_set_relief(GTK_BUTTON(close), GTK_RELIEF_NONE); @@ -201,6 +208,9 @@ badwolf_new_tab_box(const gchar *title, struct Client *browser) gtk_widget_show_all(tab_box); gtk_widget_set_visible(playing, webkit_web_view_is_playing_audio(browser->webView)); + gtk_widget_set_events(label, GDK_BUTTON_RELEASE_MASK); + g_signal_connect( + tab_box, "button-release-event", G_CALLBACK(tab_boxCb_button_release_event), browser); return tab_box; } @@ -863,6 +873,7 @@ new_browser(struct Window *window, const gchar *target_url, struct Client *old_b browser); g_signal_connect(browser->webView, "create", G_CALLBACK(WebViewCb_create), browser); g_signal_connect(browser->webView, "close", G_CALLBACK(WebViewCb_close), browser); + g_signal_connect( browser->webView, "key-press-event", G_CALLBACK(WebViewCb_key_press_event), browser); g_signal_connect(browser->webView, "scroll-event", G_CALLBACK(WebViewCb_scroll_event), browser); diff --git a/interface.txt b/interface.txt index 42f7f5c..e90e32b 100644 --- a/interface.txt +++ b/interface.txt @@ -1,5 +1,7 @@ # Badwolf -- A tablist with a new tab button at the end, right-clicking on the tablist gives you the list in a context-menu format +- A tablist with a new tab button at the end +- right-clicking on the tablist gives you the list in a context-menu format +- middle-clicking on the focused tab closes it - Each tab contains a Browser View or the Downloads View ## Tab Labels diff --git a/keybindings.c b/keybindings.c index ad704d1..cb033fd 100644 --- a/keybindings.c +++ b/keybindings.c @@ -190,3 +190,17 @@ main_windowCb_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_ return FALSE; } + +gboolean +tab_boxCb_button_release_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) +{ + (void)widget; + struct Client *browser = (struct Client *)user_data; + + if(((GdkEventButton *)event)->button == GDK_BUTTON_MIDDLE) + { + webkit_web_view_try_close(browser->webView); + return TRUE; + } + return FALSE; +} diff --git a/keybindings.h b/keybindings.h index e7d1d6b..bec9189 100644 --- a/keybindings.h +++ b/keybindings.h @@ -9,4 +9,6 @@ gboolean boxCb_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user gboolean commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client *browser); gboolean main_windowCb_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean WebViewCb_key_press_event(WebKitWebView *webView, GdkEvent *event, gpointer user_data); +gboolean tab_boxCb_button_release_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); + #endif /* KEYBINDINGS_H_INCLUDED */ -- cgit v1.3.1-23-gd82d From ffc2fc8762f7f496162e4c2fa0d535a9fe1a27fe Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sun, 14 Mar 2021 10:12:06 +0100 Subject: Initialize a GApplication --- badwolf.c | 7 +++++++ keybindings.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'keybindings.c') diff --git a/badwolf.c b/badwolf.c index 1202944..6ef4cf3 100644 --- a/badwolf.c +++ b/badwolf.c @@ -1035,11 +1035,18 @@ int main(int argc, char *argv[]) { struct Window *window = &(struct Window){NULL, NULL, NULL, NULL, NULL, NULL}; + GApplication *application; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, DATADIR "/locale"); bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); + application = g_application_new("me.hacktivis.badwolf", + G_APPLICATION_HANDLES_COMMAND_LINE | + G_APPLICATION_SEND_ENVIRONMENT | G_APPLICATION_NON_UNIQUE); + g_application_register(application, NULL, NULL); + //g_application_activate(application); + gtk_init(&argc, &argv); fprintf(stderr, _("Running Badwolf version: %s\n"), version); diff --git a/keybindings.c b/keybindings.c index cb033fd..7108acd 100644 --- a/keybindings.c +++ b/keybindings.c @@ -102,7 +102,7 @@ commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client * return TRUE; case GDK_KEY_p: webkit_print_operation_run_dialog(webkit_print_operation_new(browser->webView), - GTK_WINDOW(browser->window)); + GTK_WINDOW(browser->window->main_window)); return TRUE; } } -- cgit v1.3.1-23-gd82d