fix(electrobun): clear min-size in C before begin_resize_drag + configure logging
This commit is contained in:
parent
683013d704
commit
7af94fd4bd
2 changed files with 44 additions and 5 deletions
|
|
@ -47,6 +47,26 @@ static GdkWindowEdge edge_for_position(int win_w, int win_h, double x, double y)
|
|||
* If click is in the 8px border zone: start resize drag and consume the event.
|
||||
* If click is in the interior: return FALSE to let WebKit handle it.
|
||||
*/
|
||||
/**
|
||||
* Clear min-size on the entire widget tree so shrinking is allowed.
|
||||
* set_size_request(1,1) forces a 1x1 minimum, overriding preferred size.
|
||||
*/
|
||||
static void clear_min_size(GtkWidget *widget, int depth)
|
||||
{
|
||||
if (!widget || depth > 10) return;
|
||||
gtk_widget_set_size_request(widget, 1, 1);
|
||||
if (GTK_IS_BIN(widget)) {
|
||||
GtkWidget *child = gtk_bin_get_child(GTK_BIN(widget));
|
||||
if (child) clear_min_size(child, depth + 1);
|
||||
}
|
||||
if (GTK_IS_CONTAINER(widget)) {
|
||||
GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
|
||||
for (GList *l = children; l; l = l->next)
|
||||
clear_min_size(GTK_WIDGET(l->data), depth + 1);
|
||||
g_list_free(children);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean on_webview_button_press(GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
gpointer user_data)
|
||||
|
|
@ -57,12 +77,18 @@ static gboolean on_webview_button_press(GtkWidget *widget,
|
|||
int w, h;
|
||||
gtk_window_get_size(stored_window, &w, &h);
|
||||
|
||||
/* event->x, event->y are webview-local coords (= window coords when webview fills window) */
|
||||
GdkWindowEdge edge = edge_for_position(w, h, event->x, event->y);
|
||||
if ((int)edge == -1) return FALSE; /* Interior click — let WebKit handle */
|
||||
if ((int)edge == -1) return FALSE; /* Interior — let WebKit handle */
|
||||
|
||||
fprintf(stderr, "[agor-resize] RESIZE edge=%d btn=%d xy=(%.0f,%.0f) root=(%.0f,%.0f) t=%u\n",
|
||||
edge, event->button, event->x, event->y, event->x_root, event->y_root, event->time);
|
||||
fprintf(stderr, "[agor-resize] RESIZE edge=%d btn=%d xy=(%.0f,%.0f) root=(%.0f,%.0f) t=%u size=%dx%d\n",
|
||||
edge, event->button, event->x, event->y, event->x_root, event->y_root, event->time, w, h);
|
||||
|
||||
/* Clear min-size on entire tree BEFORE resize drag — allows shrinking */
|
||||
clear_min_size(GTK_WIDGET(stored_window), 0);
|
||||
|
||||
/* Also set geometry hints with small minimum */
|
||||
GdkGeometry geom = { .min_width = 400, .min_height = 300, .max_width = 32767, .max_height = 32767 };
|
||||
gtk_window_set_geometry_hints(stored_window, NULL, &geom, GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
|
||||
|
||||
gtk_window_begin_resize_drag(
|
||||
stored_window,
|
||||
|
|
@ -73,7 +99,7 @@ static gboolean on_webview_button_press(GtkWidget *widget,
|
|||
event->time
|
||||
);
|
||||
|
||||
return TRUE; /* Consumed — WebKit does NOT see this click */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -116,6 +142,16 @@ static gboolean on_webview_motion(GtkWidget *widget,
|
|||
return FALSE; /* Always let WebKit see motion events too */
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure-event handler — logs every window size change.
|
||||
*/
|
||||
static gboolean on_configure(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
|
||||
{
|
||||
fprintf(stderr, "[agor-resize] CONFIGURE size=%dx%d pos=%d,%d\n",
|
||||
event->width, event->height, event->x, event->y);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize: find the deepest WebView child and connect signals there.
|
||||
* Call ONCE after window creation.
|
||||
|
|
@ -155,6 +191,9 @@ void agor_resize_init(void *window_ptr, int border)
|
|||
G_CALLBACK(on_webview_button_press), NULL);
|
||||
g_signal_connect(webview, "motion-notify-event",
|
||||
G_CALLBACK(on_webview_motion), NULL);
|
||||
/* Log every window size change */
|
||||
g_signal_connect(GTK_WIDGET(stored_window), "configure-event",
|
||||
G_CALLBACK(on_configure), NULL);
|
||||
|
||||
fprintf(stderr, "[agor-resize] Initialized on %s (border=%dpx)\n",
|
||||
G_OBJECT_TYPE_NAME(webview), border_width);
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue