(svn r13025) -Codechange: remove the need for two WindowEvents.
authorrubidium
Fri, 09 May 2008 15:27:00 +0000
changeset 10482 260c05e63bf4
parent 10481 0c7aed4edabe
child 10483 200609cedea9
(svn r13025) -Codechange: remove the need for two WindowEvents.
src/network/network_gui.cpp
src/toolbar_gui.cpp
src/window.cpp
src/window_gui.h
--- 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 {