mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:18:11 +00:00
LibGUI: Notify widgets when their enabled state changes.
This is done by dispatching a (synchronous) "EnabledChange" event that can be picked up in change_event(). Use this event to kick widgets out of their "being pressed"-type modes if the user is interacting with them while the state is programmatically changed.
This commit is contained in:
parent
e478a2fb0a
commit
d12857fc36
9 changed files with 44 additions and 0 deletions
|
@ -124,3 +124,16 @@ void GAbstractButton::paint_text(GPainter& painter, const Rect& rect, const Font
|
||||||
if (is_focused())
|
if (is_focused())
|
||||||
painter.draw_rect(clipped_rect.inflated(6, 4), Color(140, 140, 140));
|
painter.draw_rect(clipped_rect.inflated(6, 4), Color(140, 140, 140));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GAbstractButton::change_event(GEvent& event)
|
||||||
|
{
|
||||||
|
if (event.type() == GEvent::Type::EnabledChange) {
|
||||||
|
if (!is_enabled()) {
|
||||||
|
bool was_being_pressed = m_being_pressed;
|
||||||
|
m_being_pressed = false;
|
||||||
|
if (was_being_pressed)
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GWidget::change_event(event);
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ protected:
|
||||||
virtual void keydown_event(GKeyEvent&) override;
|
virtual void keydown_event(GKeyEvent&) override;
|
||||||
virtual void enter_event(CEvent&) override;
|
virtual void enter_event(CEvent&) override;
|
||||||
virtual void leave_event(CEvent&) override;
|
virtual void leave_event(CEvent&) override;
|
||||||
|
virtual void change_event(GEvent&) override;
|
||||||
|
|
||||||
void paint_text(GPainter&, const Rect&, const Font&, TextAlignment);
|
void paint_text(GPainter&, const Rect&, const Font&, TextAlignment);
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ public:
|
||||||
FocusOut,
|
FocusOut,
|
||||||
WindowCloseRequest,
|
WindowCloseRequest,
|
||||||
ContextMenu,
|
ContextMenu,
|
||||||
|
EnabledChange,
|
||||||
|
|
||||||
__Begin_WM_Events,
|
__Begin_WM_Events,
|
||||||
WM_WindowRemoved,
|
WM_WindowRemoved,
|
||||||
|
|
|
@ -300,3 +300,12 @@ void GScrollBar::leave_event(CEvent&)
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GScrollBar::change_event(GEvent& event)
|
||||||
|
{
|
||||||
|
if (event.type() == GEvent::Type::EnabledChange) {
|
||||||
|
if (!is_enabled())
|
||||||
|
m_scrubbing = false;
|
||||||
|
}
|
||||||
|
return GWidget::change_event(event);
|
||||||
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ private:
|
||||||
virtual void mouseup_event(GMouseEvent&) override;
|
virtual void mouseup_event(GMouseEvent&) override;
|
||||||
virtual void mousemove_event(GMouseEvent&) override;
|
virtual void mousemove_event(GMouseEvent&) override;
|
||||||
virtual void leave_event(CEvent&) override;
|
virtual void leave_event(CEvent&) override;
|
||||||
|
virtual void change_event(GEvent&) override;
|
||||||
|
|
||||||
int button_size() const { return 16; }
|
int button_size() const { return 16; }
|
||||||
int button_width() const { return orientation() == Orientation::Vertical ? width() : button_size(); }
|
int button_width() const { return orientation() == Orientation::Vertical ? width() : button_size(); }
|
||||||
|
|
|
@ -120,6 +120,15 @@ void GSlider::leave_event(CEvent& event)
|
||||||
GWidget::leave_event(event);
|
GWidget::leave_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GSlider::change_event(GEvent& event)
|
||||||
|
{
|
||||||
|
if (event.type() == GEvent::Type::EnabledChange) {
|
||||||
|
if (!is_enabled()))
|
||||||
|
m_dragging = false;
|
||||||
|
}
|
||||||
|
GWidget::change_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
void GSlider::set_knob_hovered(bool hovered)
|
void GSlider::set_knob_hovered(bool hovered)
|
||||||
{
|
{
|
||||||
if (m_knob_hovered == hovered)
|
if (m_knob_hovered == hovered)
|
||||||
|
|
|
@ -32,6 +32,7 @@ protected:
|
||||||
virtual void mousemove_event(GMouseEvent&) override;
|
virtual void mousemove_event(GMouseEvent&) override;
|
||||||
virtual void mouseup_event(GMouseEvent&) override;
|
virtual void mouseup_event(GMouseEvent&) override;
|
||||||
virtual void leave_event(CEvent&) override;
|
virtual void leave_event(CEvent&) override;
|
||||||
|
virtual void change_event(GEvent&) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void set_knob_hovered(bool);
|
void set_knob_hovered(bool);
|
||||||
|
|
|
@ -94,6 +94,8 @@ void GWidget::event(CEvent& event)
|
||||||
return handle_enter_event(event);
|
return handle_enter_event(event);
|
||||||
case GEvent::Leave:
|
case GEvent::Leave:
|
||||||
return handle_leave_event(event);
|
return handle_leave_event(event);
|
||||||
|
case GEvent::EnabledChange:
|
||||||
|
return change_event(static_cast<GEvent&>(event));
|
||||||
default:
|
default:
|
||||||
return CObject::event(event);
|
return CObject::event(event);
|
||||||
}
|
}
|
||||||
|
@ -271,6 +273,10 @@ void GWidget::leave_event(CEvent&)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GWidget::change_event(GEvent&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void GWidget::update()
|
void GWidget::update()
|
||||||
{
|
{
|
||||||
if (rect().is_empty())
|
if (rect().is_empty())
|
||||||
|
@ -454,6 +460,8 @@ void GWidget::set_enabled(bool enabled)
|
||||||
if (m_enabled == enabled)
|
if (m_enabled == enabled)
|
||||||
return;
|
return;
|
||||||
m_enabled = enabled;
|
m_enabled = enabled;
|
||||||
|
GEvent e(GEvent::EnabledChange);
|
||||||
|
event(e);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@ public:
|
||||||
virtual void enter_event(CEvent&);
|
virtual void enter_event(CEvent&);
|
||||||
virtual void leave_event(CEvent&);
|
virtual void leave_event(CEvent&);
|
||||||
virtual void child_event(CChildEvent&) override;
|
virtual void child_event(CChildEvent&) override;
|
||||||
|
virtual void change_event(GEvent&);
|
||||||
|
|
||||||
// This is called after children have been painted.
|
// This is called after children have been painted.
|
||||||
virtual void second_paint_event(GPaintEvent&);
|
virtual void second_paint_event(GPaintEvent&);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue