Skip to content

Commit a25f177

Browse files
authored
fix: resize cannot do twice on Linux (#205)
1 parent a461d05 commit a25f177

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

linux/window_manager_plugin.cc

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ struct _WindowManagerPlugin {
3232
bool _is_always_on_top = false;
3333
bool _is_always_on_bottom = false;
3434
bool _is_dragging = false;
35+
bool _is_resizing = false;
3536
gchar* title_bar_style_ = strdup("normal");
3637
GdkEventButton _event_button = GdkEventButton{};
3738
};
@@ -558,6 +559,7 @@ static FlMethodResponse* start_resizing(WindowManagerPlugin* self,
558559
gtk_window_begin_resize_drag(window, gdk_window_edge,
559560
self->_event_button.button, root_x, root_y,
560561
timestamp);
562+
self->_is_resizing = true;
561563

562564
g_autoptr(FlValue) result = fl_value_new_bool(true);
563565
return FL_METHOD_RESPONSE(fl_method_success_response_new(result));
@@ -783,6 +785,19 @@ gboolean on_window_draw(GtkWidget* widget, cairo_t* cr, gpointer data) {
783785
return false;
784786
}
785787

788+
void emit_button_release(WindowManagerPlugin* self) {
789+
auto newEvent = (GdkEventButton*)gdk_event_new(GDK_BUTTON_RELEASE);
790+
newEvent->x = self->_event_button.x;
791+
newEvent->y = self->_event_button.y;
792+
newEvent->button = self->_event_button.button;
793+
newEvent->type = GDK_BUTTON_RELEASE;
794+
newEvent->time = g_get_monotonic_time();
795+
gboolean result;
796+
g_signal_emit_by_name(self->_event_box, "button-release-event", newEvent,
797+
&result);
798+
gdk_event_free((GdkEvent*)newEvent);
799+
}
800+
786801
gboolean on_event_after(GtkWidget* text_view,
787802
GdkEvent* event,
788803
WindowManagerPlugin* self) {
@@ -792,19 +807,13 @@ gboolean on_event_after(GtkWidget* text_view,
792807
}
793808
if (self->_is_dragging) {
794809
self->_is_dragging = false;
795-
auto newEvent = (GdkEventButton*)gdk_event_new(GDK_BUTTON_RELEASE);
796-
newEvent->x = self->_event_button.x;
797-
newEvent->y = self->_event_button.y;
798-
newEvent->button = self->_event_button.button;
799-
newEvent->type = GDK_BUTTON_RELEASE;
800-
newEvent->time = g_get_monotonic_time();
801-
gboolean result;
802-
g_signal_emit_by_name(self->_event_box, "button-release-event", newEvent,
803-
&result);
804-
gdk_event_free((GdkEvent*)newEvent);
810+
emit_button_release(self);
811+
}
812+
if (self->_is_resizing) {
813+
self->_is_resizing = false;
814+
emit_button_release(self);
805815
}
806816
}
807-
808817
return FALSE;
809818
}
810819

0 commit comments

Comments
 (0)