(svn r13025) -Codechange: remove the need for two WindowEvents.
--- a/src/network/network_gui.cpp Fri May 09 09:29:27 2008 +0000
+++ b/src/network/network_gui.cpp Fri May 09 15:27:00 2008 +0000
@@ -1480,8 +1480,6 @@
// Save our client
WP(w, menu_d).main_button = client_no;
WP(w, menu_d).sel_index = 0;
- // We are a popup
- _popup_menu_active = true;
return w;
}
@@ -1513,25 +1511,22 @@
}
} break;
- case WE_POPUPMENU_SELECT: {
+ case WE_MOUSELOOP: {
/* We selected an action */
- int index = (e->we.popupmenu.pt.y - w->top) / CLNWND_ROWSIZE;
-
- if (index >= 0 && e->we.popupmenu.pt.y >= w->top) {
- HandleClientListPopupClick(index, WP(w, menu_d).main_button);
- }
+ int index = (_cursor.pos.y - w->top) / CLNWND_ROWSIZE;
- DeleteWindowById(WC_TOOLBAR_MENU, 0);
- } break;
+ if (_left_button_down) {
+ if (index == -1 || index == WP(w, menu_d).sel_index) return;
- case WE_POPUPMENU_OVER: {
- /* Our mouse hoovers over an action? Select it! */
- int index = (e->we.popupmenu.pt.y - w->top) / CLNWND_ROWSIZE;
+ WP(w, menu_d).sel_index = index;
+ SetWindowDirty(w);
+ } else {
+ if (index >= 0 && _cursor.pos.y >= w->top) {
+ HandleClientListPopupClick(index, WP(w, menu_d).main_button);
+ }
- if (index == -1 || index == WP(w, menu_d).sel_index) return;
-
- WP(w, menu_d).sel_index = index;
- SetWindowDirty(w);
+ DeleteWindowById(WC_TOOLBAR_MENU, 0);
+ }
} break;
}
}
--- a/src/toolbar_gui.cpp Fri May 09 09:29:27 2008 +0000
+++ b/src/toolbar_gui.cpp Fri May 09 15:27:00 2008 +0000
@@ -84,8 +84,11 @@
* @param y Y coordinate of the position
* @return Index number of the menu item, or \c -1 if no valid selection under position
*/
-static int GetMenuItemIndex(const Window *w, int x, int y)
+static int GetMenuItemIndex(const Window *w)
{
+ int x = _cursor.pos.x;
+ int y = _cursor.pos.y;
+
if ((x -= w->left) >= 0 && x < w->width && (y -= w->top + 1) >= 0) {
y /= 10;
@@ -1153,34 +1156,30 @@
return;
}
- case WE_POPUPMENU_SELECT: {
- int index = GetMenuItemIndex(w, e->we.popupmenu.pt.x, e->we.popupmenu.pt.y);
-
- if (index < 0) {
- Window *w2 = FindWindowById(WC_MAIN_TOOLBAR,0);
- if (GetWidgetFromPos(w2, e->we.popupmenu.pt.x - w2->left, e->we.popupmenu.pt.y - w2->top) == WP(w, menu_d).main_button)
- index = WP(w, menu_d).sel_index;
- }
-
- int action_id = WP(w, menu_d).action_id;
- delete w;
+ case WE_MOUSELOOP: {
+ int index = GetMenuItemIndex(w);
- if (index >= 0) {
- assert((uint)index <= lengthof(_menu_clicked_procs));
- _menu_clicked_procs[action_id](index);
- }
-
- } break;
+ if (_left_button_down) {
+ if (index == -1 || index == WP(w, menu_d).sel_index) return;
- case WE_POPUPMENU_OVER: {
- int index = GetMenuItemIndex(w, e->we.popupmenu.pt.x, e->we.popupmenu.pt.y);
+ WP(w, menu_d).sel_index = index;
+ w->SetDirty();
+ } else {
+ if (index < 0) {
+ Window *w2 = FindWindowById(WC_MAIN_TOOLBAR,0);
+ if (GetWidgetFromPos(w2, _cursor.pos.x - w2->left, _cursor.pos.y - w2->top) == WP(w, menu_d).main_button)
+ index = WP(w, menu_d).sel_index;
+ }
- if (index == -1 || index == WP(w, menu_d).sel_index) return;
+ int action_id = WP(w, menu_d).action_id;
+ delete w;
- WP(w, menu_d).sel_index = index;
- w->SetDirty();
- return;
- }
+ if (index >= 0) {
+ assert((uint)index <= lengthof(_menu_clicked_procs));
+ _menu_clicked_procs[action_id](index);
+ }
+ }
+ } break;
}
}
@@ -1262,8 +1261,6 @@
WP(w, menu_d).checked_items = 0;
WP(w, menu_d).disabled_items = disabled_mask;
- _popup_menu_active = true;
-
SndPlayFx(SND_15_BEEP);
return w;
}
@@ -1350,51 +1347,48 @@
return;
}
- case WE_POPUPMENU_SELECT: {
- int index = GetMenuItemIndex(w, e->we.popupmenu.pt.x, e->we.popupmenu.pt.y);
- int action_id = WP(w, menu_d).action_id;
+ case WE_MOUSELOOP: {
+ int index = GetMenuItemIndex(w);
- /* We have a new entry at the top of the list of menu 9 when networking
- * so keep that in count */
- if (_networking && WP(w, menu_d).main_button == 9) {
- if (index > 0) index = GetPlayerIndexFromMenu(index - 1) + 1;
+ if (_left_button_down) {
+ UpdatePlayerMenuHeight(w);
+ /* We have a new entry at the top of the list of menu 9 when networking
+ * so keep that in count */
+ if (_networking && WP(w, menu_d).main_button == 9) {
+ if (index > 0) index = GetPlayerIndexFromMenu(index - 1) + 1;
+ } else {
+ index = GetPlayerIndexFromMenu(index);
+ }
+
+ if (index == -1 || index == WP(w, menu_d).sel_index) return;
+
+ WP(w, menu_d).sel_index = index;
+ w->SetDirty();
} else {
- index = GetPlayerIndexFromMenu(index);
- }
+ int action_id = WP(w, menu_d).action_id;
- if (index < 0) {
- Window *w2 = FindWindowById(WC_MAIN_TOOLBAR,0);
- if (GetWidgetFromPos(w2, e->we.popupmenu.pt.x - w2->left, e->we.popupmenu.pt.y - w2->top) == WP(w, menu_d).main_button)
- index = WP(w, menu_d).sel_index;
- }
+ /* We have a new entry at the top of the list of menu 9 when networking
+ * so keep that in count */
+ if (_networking && WP(w, menu_d).main_button == 9) {
+ if (index > 0) index = GetPlayerIndexFromMenu(index - 1) + 1;
+ } else {
+ index = GetPlayerIndexFromMenu(index);
+ }
- delete w;
+ if (index < 0) {
+ Window *w2 = FindWindowById(WC_MAIN_TOOLBAR,0);
+ if (GetWidgetFromPos(w2, _cursor.pos.x - w2->left, _cursor.pos.y - w2->top) == WP(w, menu_d).main_button)
+ index = WP(w, menu_d).sel_index;
+ }
- if (index >= 0) {
- assert(index >= 0 && index < 30);
- _menu_clicked_procs[action_id](index);
+ delete w;
+
+ if (index >= 0) {
+ assert(index >= 0 && index < 30);
+ _menu_clicked_procs[action_id](index);
+ }
}
} break;
-
- case WE_POPUPMENU_OVER: {
- int index;
- UpdatePlayerMenuHeight(w);
- index = GetMenuItemIndex(w, e->we.popupmenu.pt.x, e->we.popupmenu.pt.y);
-
- /* We have a new entry at the top of the list of menu 9 when networking
- * so keep that in count */
- if (_networking && WP(w, menu_d).main_button == 9) {
- if (index > 0) index = GetPlayerIndexFromMenu(index - 1) + 1;
- } else {
- index = GetPlayerIndexFromMenu(index);
- }
-
- if (index == -1 || index == WP(w, menu_d).sel_index) return;
-
- WP(w, menu_d).sel_index = index;
- w->SetDirty();
- return;
- }
}
}
@@ -1426,7 +1420,7 @@
WP(w, menu_d).main_button = main_button;
WP(w, menu_d).checked_items = gray;
WP(w, menu_d).disabled_items = 0;
- _popup_menu_active = true;
+
SndPlayFx(SND_15_BEEP);
return w;
}
--- a/src/window.cpp Fri May 09 09:29:27 2008 +0000
+++ b/src/window.cpp Fri May 09 15:27:00 2008 +0000
@@ -44,7 +44,6 @@
bool _scrolling_scrollbar;
bool _scrolling_viewport;
-bool _popup_menu_active;
byte _special_mouse_mode;
@@ -1131,31 +1130,6 @@
return false;
}
-static bool HandlePopupMenu()
-{
- if (!_popup_menu_active) return true;
-
- Window *w = FindWindowById(WC_TOOLBAR_MENU, 0);
- if (w == NULL) {
- _popup_menu_active = false;
- return false;
- }
-
- WindowEvent e;
- if (_left_button_down) {
- e.event = WE_POPUPMENU_OVER;
- e.we.popupmenu.pt = _cursor.pos;
- } else {
- _popup_menu_active = false;
- e.event = WE_POPUPMENU_SELECT;
- e.we.popupmenu.pt = _cursor.pos;
- }
-
- w->HandleWindowEvent(&e);
-
- return false;
-}
-
static bool HandleMouseOver()
{
Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
@@ -1827,7 +1801,6 @@
UpdateTileSelection();
if (!VpHandlePlaceSizingDrag()) return;
if (!HandleDragDrop()) return;
- if (!HandlePopupMenu()) return;
if (!HandleWindowDragging()) return;
if (!HandleScrollbarScrolling()) return;
if (!HandleViewportScroll()) return;
--- a/src/window_gui.h Fri May 09 09:29:27 2008 +0000
+++ b/src/window_gui.h Fri May 09 15:27:00 2008 +0000
@@ -126,8 +126,6 @@
WE_ABORT_PLACE_OBJ,
WE_ON_EDIT_TEXT,
WE_ON_EDIT_TEXT_CANCEL,
- WE_POPUPMENU_SELECT,
- WE_POPUPMENU_OVER,
WE_DRAGDROP,
WE_PLACE_DRAG,
WE_PLACE_MOUSEUP,
@@ -179,10 +177,6 @@
} edittext;
struct {
- Point pt;
- } popupmenu;
-
- struct {
int button;
int index;
} dropdown;
@@ -563,7 +557,6 @@
extern bool _scrolling_scrollbar;
extern bool _scrolling_viewport;
-extern bool _popup_menu_active;
extern byte _special_mouse_mode;
enum SpecialMouseMode {