double y,
NoteEditor *editor);
+static void editor_update_width(NoteEditor *editor);
+
#else
static gboolean editor_textview_event_after(GtkWidget *textview, GdkEvent *ev, NoteEditor *editor);
guint time,
NoteEditor *editor);
+static void editor_update_width(NoteEditor *editor);
+
#endif
+static void editor_realize(GtkWidget *unused, NoteEditor *editor) {
+ editor_update_width(editor);
+}
+
void editor_global_init() {
markdown_tags = cxHashMapCreateSimple(sizeof(MDTag));
g_object_set_data(G_OBJECT(textview), "editor", editor);
-#if GTK_CHECK_VERSION(4, 0, 0)
+#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);
#endif
g_signal_connect(textview, "notify::buffer", G_CALLBACK(editor_set_buffer_cb), editor);
+ g_signal_connect(textview, "realize", G_CALLBACK(editor_realize), editor);
+
+}
+
+static void editor_resize(NoteEditor *editor) {
+ editor_update_width(editor);
+ printf("editor resize: %d\n", editor->width);
}
#if GTK_CHECK_VERSION(4, 0, 0)
+static void editor_gtk4_resize(
+ GtkDrawingArea *self,
+ gint width,
+ gint height,
+ gpointer userdata)
+{
+ MainWindow *wdata = userdata;
+ NoteEditor *editor = g_object_get_data(G_OBJECT(ui_textarea_gettextwidget(wdata->textview)), "editor");
+ if(editor) {
+ editor_resize(editor);
+ }
+}
+
+GtkWidget* editor_gtk4_workaround(UiObject *obj, UiWidgetArgs args, void *userdata) {
+ GtkWidget *drawingarea = gtk_drawing_area_new();
+ //gtk_widget_add_css_class(drawingarea, "ui_test");
+ gtk_widget_set_size_request(drawingarea, 10, 1);
+ g_signal_connect(drawingarea, "resize", G_CALLBACK(editor_gtk4_resize), userdata);
+ return drawingarea;
+}
+
/*
* handle clicks inside the textview and follow links when possible
*/
return success;
}
+static void editor_update_width(NoteEditor *editor) {
+ editor->width = gtk_widget_get_width(gtk_widget_get_parent(editor->textview));
+}
+
#else
static void editor_drop_cb(
return TRUE;
}
+static void editor_update_width(NoteEditor *editor) {
+ GtkAllocation allocation;
+ gtk_widget_get_allocated_size(gtk_widget_get_parent(editor->textview), &allocation, NULL);
+ editor->width = allocation.width;
+}
+
#endif
void editor_try_follow_link(NoteEditor *editor, GtkTextIter *pos) {
//ui_widget_set_size(sw, -1, 120);
}
ui_widget_set_size(wdata->attachments, -1, 120);
+#if GTK_MAJOR_VERSION >= 4
+ ui_customwidget(obj, editor_gtk4_workaround, wdata, .hfill = TRUE);
+#endif
//ui_set_visible(wdata->attachments, FALSE);
//ui_widget_set_groups(obj->ctx, wdata->attachments, (ui_enablefunc)ui_set_visible, APP_STATE_NOTE_HAS_ATTACHMENTS, -1);
wdata->textview = ui_textarea(obj, .varname = "note_text", .vfill = TRUE, .hfill = TRUE, .hexpand = TRUE, .vexpand = TRUE, .colspan = 2, .groups = UI_GROUPS(APP_STATE_NOTE_SELECTED), .fill = UI_ON);