implement UI_LINK_BUTTON type (GTK)

Sun, 12 Oct 2025 09:17:37 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 12 Oct 2025 09:17:37 +0200
changeset 840
f74250eda598
parent 839
f1b5e7dd27b9
child 841
651cf2c59dd9
child 842
2ba50231b255

implement UI_LINK_BUTTON type (GTK)

ui/gtk/button.c file | annotate | diff | comparison | revisions
--- a/ui/gtk/button.c	Sun Oct 12 08:30:29 2025 +0200
+++ b/ui/gtk/button.c	Sun Oct 12 09:17:37 2025 +0200
@@ -805,7 +805,7 @@
     return create_linkbutton_jsonvalue(label, uri, TRUE, visited, TRUE);
 }
 
-static void linkbutton_clicked(GtkWidget *widget, UiLinkButton *data) {
+static void linkbutton_callback(GtkWidget *widget, UiLinkButton *data) {
     if(data->onclick) {
         UiEvent e;
         e.obj = data->obj;
@@ -819,8 +819,24 @@
     }
 }
 
+static void linkbutton_clicked(GtkWidget *widget, UiLinkButton *data) {
+    linkbutton_callback(widget, data);
+    if(data->link) {   
+#if GTK_CHECK_VERSION(4, 0, 0)
+        GtkUriLauncher *launcher = gtk_uri_launcher_new (data->link);
+        gtk_uri_launcher_launch (launcher, NULL, NULL, NULL, NULL);
+        g_object_unref (launcher);
+#elif GTK_CHECK_VERSION(3, 22, 0)
+        GError *error = NULL;
+        gtk_show_uri_on_window(NULL, data->link, GDK_CURRENT_TIME, &error);
+#elif
+        // TODO: call xdg-open
+#endif
+    }
+}
+
 static gboolean linkbutton_activate_link(GtkLinkButton *self, UiLinkButton *data) {
-    linkbutton_clicked(data->widget, data);
+    linkbutton_callback(data->widget, data);
     return data->nofollow;
 }
 

mercurial