commit: 7e77cef6c4bad117074236cce3c5114d1b763660
parent: f14db688dc911b2720d030becb7482ddd2fcdff4
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sat,  6 Apr 2019 03:43:21 +0200
Merge branch 'features/change-window-title' into develop
Diffstat:
| M | badwolf.c | 36 | ++++++++++++++++++++++++++++++------ | 
1 file changed, 30 insertions(+), 6 deletions(-)
diff --git a/badwolf.c b/badwolf.c
@@ -63,6 +63,7 @@ void new_tabCb_clicked(GtkButton *new_tab, gpointer user_data);
 void closeCb_clicked(GtkButton *close, gpointer user_data);
 int badwolf_new_tab(GtkNotebook *notebook, struct Client *browser);
 GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser);
+gint get_tab_position(GtkContainer *notebook, GtkWidget *child);
 int main(int argc, char *argv[]);
 
 static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data)
@@ -70,12 +71,8 @@ static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data)
 	(void)webView;
 	struct Client *browser = (struct Client *)user_data;
 	GtkNotebook *notebook  = GTK_NOTEBOOK(browser->window->notebook);
-	GValue position        = G_VALUE_INIT;
-	g_value_init(&position, G_TYPE_INT);
-
-	gtk_container_child_get_property(GTK_CONTAINER(notebook), browser->box, "position", &position);
 
-	gtk_notebook_remove_page(notebook, g_value_get_int(&position));
+	gtk_notebook_remove_page(notebook, get_tab_position(GTK_CONTAINER(notebook), browser->box));
 
 	gtk_widget_destroy(browser->box);
 
@@ -175,6 +172,7 @@ WebViewCb_notify__is__playing__audio(WebKitWebView *webView, GParamSpec *pspec, 
 void webView_tab_label_change(struct Client *browser)
 {
 	const gchar *title;
+	GtkWidget *notebook = browser->window->notebook;
 
 	title = webkit_web_view_get_title(browser->webView);
 
@@ -183,7 +181,11 @@ void webView_tab_label_change(struct Client *browser)
 	if(title == NULL) title = "BadWolf";
 
 	gtk_notebook_set_tab_label(
-	    GTK_NOTEBOOK(browser->window->notebook), browser->box, badwolf_new_tab_box(title, browser));
+	    GTK_NOTEBOOK(notebook), browser->box, badwolf_new_tab_box(title, browser));
+
+	if(get_tab_position(GTK_CONTAINER(notebook), browser->box) ==
+	   gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)))
+		gtk_window_set_title(GTK_WINDOW(browser->window->main_window), title);
 }
 
 static gboolean WebViewCb_notify__estimated_load_progress(WebKitWebView *webView,
@@ -456,6 +458,27 @@ void closeCb_clicked(GtkButton *close, gpointer user_data)
 	webkit_web_view_try_close(browser->webView);
 }
 
+static void
+notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data)
+{
+	(void)page_num;
+	struct Window *window = (struct Window *)user_data;
+	GtkWidget *label      = gtk_notebook_get_tab_label(notebook, page);
+
+	// TODO: Maybe find a better way to store the title
+	gtk_window_set_title(GTK_WINDOW(window->main_window), gtk_widget_get_tooltip_text(label));
+}
+
+gint get_tab_position(GtkContainer *notebook, GtkWidget *child)
+{
+	GValue position = G_VALUE_INIT;
+	g_value_init(&position, G_TYPE_INT);
+
+	gtk_container_child_get_property(notebook, child, "position", &position);
+
+	return g_value_get_int(&position);
+}
+
 int main(int argc, char *argv[])
 {
 	struct Window *window = g_malloc(sizeof(struct Client));
@@ -497,6 +520,7 @@ int main(int argc, char *argv[])
 
 	g_signal_connect(window->main_window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
 	g_signal_connect(window->new_tab, "clicked", G_CALLBACK(new_tabCb_clicked), window);
+	g_signal_connect(window->notebook, "switch-page", G_CALLBACK(notebookCb_switch__page), window);
 
 	gtk_widget_show(window->new_tab);
 	gtk_widget_show_all(window->main_window);