]> uap-core.de Git - note.git/commitdiff
make textview compatible with gtk3
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 18 Mar 2025 17:08:04 +0000 (18:08 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 18 Mar 2025 17:08:04 +0000 (18:08 +0100)
application/gtk-text.c
configure
make/project.xml
ui/gtk/list.c
ui/gtk/webview.h

index 068c2c95fcad0da034e1e2ff1f5f6cb5ef110f22..5181556e3d7f9f82cfc22aa68273c3261d62c613 100644 (file)
 
 static CxMap *markdown_tags;
 
+static void editor_set_cursor_cb(
+        GtkTextBuffer *buffer,
+        const GtkTextIter *location,
+        GtkTextMark *mark,
+        NoteEditor *editor);
+
+#if GTK_CHECK_VERSION(4, 0, 0)
 static void editor_button_released_cb(
         GtkGestureClick *gesture,
         guint n_press,
@@ -51,11 +58,11 @@ static void editor_button_released_cb(
         double y,
         NoteEditor *editor);
 
-static void editor_set_cursor_cb(
-        GtkTextBuffer *buffer,
-        const GtkTextIter *location,
-        GtkTextMark *mark,
-        NoteEditor *editor);
+#else
+
+static gboolean editor_textview_event_after(GtkWidget *textview, GdkEvent *ev, NoteEditor *editor);
+
+#endif
 
 void editor_global_init() {
     markdown_tags = cxHashMapCreateSimple(sizeof(MDTag));
@@ -85,47 +92,16 @@ void editor_init_textview(UiObject *obj, UIWIDGET textview) {
     
     g_object_set_data(G_OBJECT(textview), "editor", editor);
     
+#if GTK_CHECK_VERSION(4, 0, 0)
     // gesture event controller is used for handling clicks on links
     GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
     g_signal_connect(controller, "released", G_CALLBACK(editor_button_released_cb), editor);
     gtk_widget_add_controller(textview, controller);
+#else
+    g_signal_connect(textview, "event-after", G_CALLBACK(editor_textview_event_after), editor);
+#endif
 }
 
-/*
- * handle clicks inside the textview and follow links when possible
- */
-static void editor_button_released_cb(
-        GtkGestureClick *gesture,
-        guint n_press,
-        double x,
-        double y,
-        NoteEditor *editor)
-{
-    GtkTextView *textview = GTK_TEXT_VIEW(editor->textview);
-    if(gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)) != 1) {
-        return;
-    }
-    
-    GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
-    
-    if(gtk_text_buffer_get_has_selection(buffer)) {
-        return;
-    }
-    
-    int buffer_x, buffer_y;
-    gtk_text_view_window_to_buffer_coords(
-            textview,
-            GTK_TEXT_WINDOW_WIDGET,
-            x,
-            y,
-            &buffer_x,
-            &buffer_y);
-    
-    GtkTextIter pos;
-    if(gtk_text_view_get_iter_at_location(textview, &pos, buffer_x, buffer_y)) {
-        editor_try_follow_link(editor, &pos);
-    }
-}
 
 // update the paragraph style dropdown list to the style of the current
 // cursor position
@@ -159,6 +135,7 @@ static void update_cursor_paragraph_style(NoteEditor *editor, GtkTextBuffer *buf
     }
 }
 
+
 static void editor_set_cursor_cb(
         GtkTextBuffer *buffer,
         const GtkTextIter *location,
@@ -173,6 +150,82 @@ static void editor_set_cursor_cb(
     update_cursor_paragraph_style(editor, buffer);
 }
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+
+/*
+ * handle clicks inside the textview and follow links when possible
+ */
+static void editor_button_released_cb(
+        GtkGestureClick *gesture,
+        guint n_press,
+        double x,
+        double y,
+        NoteEditor *editor)
+{
+    GtkTextView *textview = GTK_TEXT_VIEW(editor->textview);
+    if(gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)) != 1) {
+        return;
+    }
+    
+    GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
+    
+    if(gtk_text_buffer_get_has_selection(buffer)) {
+        return;
+    }
+    
+    int buffer_x, buffer_y;
+    gtk_text_view_window_to_buffer_coords(
+            textview,
+            GTK_TEXT_WINDOW_WIDGET,
+            x,
+            y,
+            &buffer_x,
+            &buffer_y);
+    
+    GtkTextIter pos;
+    if(gtk_text_view_get_iter_at_location(textview, &pos, buffer_x, buffer_y)) {
+        editor_try_follow_link(editor, &pos);
+    }
+}
+
+#else
+
+static gboolean editor_textview_event_after(GtkWidget *textview, GdkEvent *ev, NoteEditor *editor) {
+    int x, y;
+    if(ev->type == GDK_BUTTON_RELEASE) {
+        GdkEventButton *event = (GdkEventButton *)ev;
+        if (event->button != GDK_BUTTON_PRIMARY) {
+            return FALSE;
+        }
+        x = event->x;
+        y = event->y;
+    } else if(ev->type == GDK_TOUCH_END) {
+        GdkEventTouch *event = (GdkEventTouch *)ev;
+        x = event->x;
+        y = event->y;
+    } else {
+        return FALSE;
+    }
+    
+    int buffer_x, buffer_y;
+    gtk_text_view_window_to_buffer_coords(
+            GTK_TEXT_VIEW(textview),
+            GTK_TEXT_WINDOW_WIDGET,
+            x,
+            y,
+            &buffer_x,
+            &buffer_y);
+    
+    GtkTextIter pos;
+    if(gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(textview), &pos, buffer_x, buffer_y)) {
+        editor_try_follow_link(editor, &pos);
+    }
+    
+    return TRUE;
+}
+
+#endif
+
 void editor_try_follow_link(NoteEditor *editor, GtkTextIter *pos) {
     GSList *tags = gtk_text_iter_get_tags(pos);
     while(tags) {
index 7dd94355ba4fd72e9c65a9f144dbb63066077c2b..e2b8929c1dde5b421475535db20b16df67f97e6f 100755 (executable)
--- a/configure
+++ b/configure
@@ -401,9 +401,9 @@ dependency_error_gtk3()
         if [ -z "$PKG_CONFIG" ]; then
             break
         fi
-        if test_pkg_config "gtk3" "" "" "" ; then
-            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk3`"
-            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk3`"
+        if test_pkg_config "gtk+-3.0" "" "" "" ; then
+            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-3.0`"
+            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-3.0`"
         else
             break
         fi
index 1123a0dd23ce1a37ae4ff5d1a04ad03647518422..3b9cacc06490edab2d3e8339238e2433ea32da84 100644 (file)
@@ -61,7 +61,7 @@
                <ldflags>-lpthread</ldflags>
        </dependency>
        <dependency name="gtk3">
-               <pkgconfig>gtk3</pkgconfig>
+               <pkgconfig>gtk+-3.0</pkgconfig>
                <cflags>-DUI_GTK3</cflags>
                <ldflags>-lpthread</ldflags>
        </dependency>
index cd276386e2dc6ea07b3899f296f43c34da10054a..c3a2cfdd490974419e4f8a775fbb5e8b96588636 100644 (file)
@@ -1146,7 +1146,6 @@ GtkWidget* ui_create_combobox(UiObject *obj, UiModel *model, UiVar *var, char **
         event->callback = f;
         event->value = 0;
         event->customdata = uicbox;
-        event.set = ui_get_setop();
 
         g_signal_connect(
                 combobox,
index c06cfe2e70cb91b0470e9c7b13649dce33eecdd8..e3508589a07b47fbbb40ee4d18b77f70ec027727 100644 (file)
 #ifdef UI_WEBVIEW
 
 #include "../ui/webview.h"
+
+#if GTK_MAJOR_VERSION >= 4
 #include <webkit/webkit.h>
+#else
+#include <webkit2/webkit2.h>
+#endif
 
 #ifdef __cplusplus
 extern "C" {