From 7af94fd4bdc915bf92682daee2f05b5e00183e76 Mon Sep 17 00:00:00 2001 From: Hibryda Date: Wed, 25 Mar 2026 17:51:57 +0100 Subject: [PATCH] fix(electrobun): clear min-size in C before begin_resize_drag + configure logging --- agor-pty/native/agor_resize.c | 49 +++++++++++++++++++++++++++--- agor-pty/native/libagor-resize.so | Bin 16688 -> 17048 bytes 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/agor-pty/native/agor_resize.c b/agor-pty/native/agor_resize.c index d6e5ef8..39c2b3b 100644 --- a/agor-pty/native/agor_resize.c +++ b/agor-pty/native/agor_resize.c @@ -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); diff --git a/agor-pty/native/libagor-resize.so b/agor-pty/native/libagor-resize.so index 192eca7003d2bf4f4cc1e2f90903f79537c9a974..d18ae2d127023a172a1748b5a4a41ce5ce5b61b7 100755 GIT binary patch literal 17048 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 RG5!9VmBjljsA-}8{{lUcrDFg9 delta 3673 zcmZu!4Qx}_6@K^GPGZL)c1U77p|Kqpgg@JX{NU6kb`sN9Bp_`U0o^)S2PD}#1XEln zYZ_>piYL#N$=Nj2g(}+A4mM2%QdNLheRW5c)tI)M1omt<9r?b;pA1A6jPGCLR=ysK>;-kDtg@q|J3ODkBvLCLCHgX6~A-zibVA0u$o5??eu+9!voelbRJ`!eF3!`r`dY;h}%tJ2g zPtv}j9lcv&l*}i<&^;9G)!WG)CceYy2W+y0UcakAFbgY+aST51X-lg_ZV_z4$q<8Q zNg2b7g}z7dZ)o=YkKkjtdg?!AhjWH@sI8j^nXD4XSyP;~uYE`B&JGA=x!}iHMp%~} zhk)N%_I&&9ZHRB{cxlg0p|#@&+c@yOw)Pixz*u$PHpV5&y zHaXB~v^liuX4=#otrdP}+(rzLXY#@eCNoGTvm(o# z>PdDOl~lg-Aho@qakMuw`)bh(x2&aNkq3+gk1hQpju4{DTcqybBt0dP{I3qP6brtE zczUa%DCr$YE*g%(rUD=?tCw zh7*fMibYbfP*rz^bZDrNp$0D<5^uRD#W!Rm`OlJkDgD|*MWObS`IeB2cBGhOkG0&3 zMKZhcD~5MT`MZbYE8jxP9bYPn9GU6voKg5>12lR%+5SS!N3*1Lq>$F(Uia9UrBsEX zrC3$@)hd(Gy^ZCm(9T2wl!T6h9A?5(ord16rf8XBT5PjyYRs1e-W zi<11;bcP{xS6i?}uzpzhqZFoP)8V9fq$}Ep&`m3~8Ki|oq2EqJzN1{Morcwp_1}Cj zMe}hh7P-}vj4s2Z*DXb}82+~$m*RPP77wi{R*2~U`nzGpw@CUl4rB?89M`5#F~l&m z6h<9|;a{Mi^lols=%a4cFi$WrlDfGn{Uz7aXxSQm!jMa8{S+)NDHA`Kf^{Y9yV4mN z<+WJkT2C^+rxg#+kKJYN=_c~2Z+wAfGOc{4I<@=>j=G?ZQuDu<&HG&D z@`Vta$ct(}viHuQn}r0v)sQmoE&gU+}(eU_7@<*Xxqt8CSFG z;XOsUjLmdkQ9eUHj?ISsE65iihm30s%H4%<$NhScUI*ywSGc1n+mZSHttf|)Pa*F| zo;#r^N#xH>DoP5u8J*DYeeyr(42H^=7>?dn6d&9!Ur74Fy3p3}6pk#Q`x2gKd0lMG z%hKf$b9Rof0HK$$HI6IF(_hnXnAP{8J~{z!EG+i8uzMbx{;s01Pd0ZK>DK9fBT|pd zWeRP6dVgSY;h+)5bKiTCfBE>Aj?P4%e`*~rPd*~!$CN!>UkFBz(`t99sK$gO_&rWC z3|l>3(hM^88{mY;E1o29)l*h*5`&@-%P8{kY%qB};z%~sdCSD!YVA7XO2|kw3VRf f07Jua)0t{j^O_Fo8fuIIzbZ}u(anbs1Lpq%k>KfH