gui.formwin = gui_gtk_form_new();
gtk_widget_set_name(gui.formwin, "vim-gtk-form");
// formwin is overlaid on top of drawarea for scrollbar positioning.
- // Disable input targeting so mouse events pass through to drawarea.
- gtk_widget_set_can_target(gui.formwin, FALSE);
+ // GtkForm's contains() returns FALSE so empty-area clicks fall through
+ // to the drawarea, while the scrollbar children still receive events.
// The drawing area for the editor content.
// Placed in an overlay so it fills the formwin, with scrollbars on top.
if (sb->id == NULL)
return;
- if (!GTK_IS_WIDGET(sb->id) || !GTK_IS_RANGE(sb->id))
+ if (!GTK_IS_WIDGET(sb->id) || !GTK_IS_SCROLLBAR(sb->id))
return;
- adj = gtk_range_get_adjustment(GTK_RANGE(sb->id));
+ adj = gtk_scrollbar_get_adjustment(GTK_SCROLLBAR(sb->id));
gtk_adjustment_set_lower(adj, 0.0);
gtk_adjustment_set_upper(adj, (gdouble)max + 1);
gtk_adjustment_set_value(adj, (gdouble)val);
else
sb->id = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, NULL);
- if (sb->id != NULL && GTK_IS_RANGE(sb->id))
+ if (sb->id != NULL && GTK_IS_SCROLLBAR(sb->id))
{
- GtkAdjustment *adj = gtk_range_get_adjustment(GTK_RANGE(sb->id));
+ GtkAdjustment *adj = gtk_scrollbar_get_adjustment(GTK_SCROLLBAR(sb->id));
gtk_widget_set_visible(sb->id, FALSE);
gui_gtk_form_put(GTK_FORM(gui.formwin), sb->id, 0, 0);
static void form_size_allocate(GtkWidget *widget, int width, int height,
int baseline);
static void form_snapshot(GtkWidget *widget, GtkSnapshot *snapshot);
+static gboolean form_contains(GtkWidget *widget, double x, double y);
static void form_dispose(GObject *object);
static void form_position_child(GtkForm *form, GtkFormChild *child,
gboolean force_allocate);
widget_class->measure = form_measure;
widget_class->size_allocate = form_size_allocate;
widget_class->snapshot = form_snapshot;
+ widget_class->contains = form_contains;
}
static void
}
}
+// Make the form itself input-transparent so clicks on its empty area fall
+// through to the drawarea below, while the scrollbar children stay pickable.
+ static gboolean
+form_contains(GtkWidget *widget UNUSED, double x UNUSED, double y UNUSED)
+{
+ return FALSE;
+}
+
static void
form_dispose(GObject *object)
{