1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:58:11 +00:00

GWidget: Add set_updates_enabled() for temporarily suppressing updates.

This commit is contained in:
Andreas Kling 2019-05-02 03:46:37 +02:00
parent c3b7ace3e0
commit 6d5507313e
2 changed files with 26 additions and 4 deletions

View file

@ -283,6 +283,8 @@ void GWidget::leave_event(CEvent&)
void GWidget::update() void GWidget::update()
{ {
if (rect().is_empty())
return;
update(rect()); update(rect());
} }
@ -290,10 +292,17 @@ void GWidget::update(const Rect& rect)
{ {
if (!is_visible()) if (!is_visible())
return; return;
auto* w = window();
if (!w) GWindow* window = m_window;
return; GWidget* parent = parent_widget();
w->update(rect.translated(window_relative_rect().location())); while (parent) {
if (!parent->updates_enabled())
return;
window = parent->m_window;
parent = parent->parent_widget();
}
if (window)
window->update(rect.translated(window_relative_rect().location()));
} }
Rect GWidget::window_relative_rect() const Rect GWidget::window_relative_rect() const
@ -516,3 +525,12 @@ void GWidget::unregister_local_shortcut_action(Badge<GAction>, GAction& action)
{ {
m_local_shortcut_actions.remove(action.shortcut()); m_local_shortcut_actions.remove(action.shortcut());
} }
void GWidget::set_updates_enabled(bool enabled)
{
if (m_updates_enabled == enabled)
return;
m_updates_enabled = enabled;
if (enabled)
update();
}

View file

@ -45,6 +45,9 @@ public:
bool is_enabled() const { return m_enabled; } bool is_enabled() const { return m_enabled; }
void set_enabled(bool); void set_enabled(bool);
bool updates_enabled() const { return m_updates_enabled; }
void set_updates_enabled(bool);
virtual void event(CEvent&) override; virtual void event(CEvent&) override;
virtual void paint_event(GPaintEvent&); virtual void paint_event(GPaintEvent&);
virtual void resize_event(GResizeEvent&); virtual void resize_event(GResizeEvent&);
@ -211,6 +214,7 @@ private:
bool m_greedy_for_hits { false }; bool m_greedy_for_hits { false };
bool m_enabled { true }; bool m_enabled { true };
bool m_layout_dirty { false }; bool m_layout_dirty { false };
bool m_updates_enabled { true };
CElapsedTimer m_left_click_clock; CElapsedTimer m_left_click_clock;
CElapsedTimer m_right_click_clock; CElapsedTimer m_right_click_clock;