MCPcopy Create free account
hub / github.com/LibreSprite/LibreSprite / onProcessMessage

Method onProcessMessage

src/ui/popup_window.cpp:75–157  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73}
74
75bool PopupWindow::onProcessMessage(Message* msg)
76{
77 switch (msg->type()) {
78
79 // There are cases where startFilteringMessages() is called when a
80 // kCloseMessage for this same PopupWindow is enqueued. Processing
81 // the kOpenMessage we ensure that the popup will be filtering
82 // messages if it's needed when it's visible (as kCloseMessage and
83 // kOpenMessage must be enqueued in the correct order).
84 case kOpenMessage:
85 if (!isMoveable())
86 startFilteringMessages();
87 break;
88
89 case kCloseMessage:
90 stopFilteringMessages();
91 break;
92
93 case kMouseLeaveMessage:
94 if (m_hotRegion.isEmpty() && !isMoveable())
95 closeWindow(nullptr);
96 break;
97
98 case kKeyDownMessage:
99 if (m_filtering) {
100 KeyMessage* keymsg = static_cast<KeyMessage*>(msg);
101 KeyScancode scancode = keymsg->scancode();
102
103 if (scancode == kKeyEsc)
104 closeWindow(nullptr);
105
106 if (m_enterBehavior == EnterBehavior::CloseOnEnter &&
107 (scancode == kKeyEnter ||
108 scancode == kKeyEnterPad)) {
109 closeWindow(this);
110 return true;
111 }
112 }
113 break;
114
115 case kMouseDownMessage:
116 if (m_filtering &&
117 manager()->getTopWindow() == this) {
118 gfx::Point mousePos = static_cast<MouseMessage*>(msg)->position();
119
120 switch (m_clickBehavior) {
121
122 // If the user click outside the window, we have to close
123 // the tooltip window.
124 case ClickBehavior::CloseOnClickInOtherWindow: {
125 Widget* picked = pick(mousePos);
126 if (!picked || picked->window() != this) {
127 closeWindow(NULL);
128 }
129 break;
130 }
131
132 case ClickBehavior::CloseOnClickOutsideHotRegion:

Callers

nothing calls this directly

Calls 8

getTopWindowMethod · 0.80
windowMethod · 0.80
getCaptureMethod · 0.80
typeMethod · 0.45
isEmptyMethod · 0.45
scancodeMethod · 0.45
positionMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected