summaryrefslogtreecommitdiff
path: root/src/guiFormSpecMenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/guiFormSpecMenu.cpp')
-rw-r--r--src/guiFormSpecMenu.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index 3fdb5bd26..65dbc0187 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -2950,9 +2950,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
}
- if(event.EventType==EET_MOUSE_INPUT_EVENT
- && event.MouseInput.Event != EMIE_MOUSE_MOVED) {
- // Mouse event other than movement
+ if((event.EventType==EET_MOUSE_INPUT_EVENT &&
+ event.MouseInput.Event != EMIE_MOUSE_MOVED) ||
+ (event.MouseInput.Event == EMIE_MOUSE_MOVED &&
+ event.MouseInput.isRightPressed() && getItemAtPos(m_pointer).i != getItemAtPos(m_old_pointer).i)){
+ // Mouse event other than movement or crossing the border of inventory field while holding rmb
// Get selected item and hovered/clicked item (s)
@@ -3008,7 +3010,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
(m_selected_item->i == s.i);
// buttons: 0 = left, 1 = right, 2 = middle
- // up/down: 0 = down (press), 1 = up (release), 2 = unknown event
+ // up/down: 0 = down (press), 1 = up (release), 2 = unknown event, -1 movement
int button = 0;
int updown = 2;
if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
@@ -3023,6 +3025,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
{ button = 1; updown = 1; }
else if(event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP)
{ button = 2; updown = 1; }
+ else if(event.MouseInput.Event == EMIE_MOUSE_MOVED)
+ { updown = -1;}
// Set this number to a positive value to generate a move action
// from m_selected_item to s.
@@ -3113,6 +3117,16 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
m_selected_dragging = false;
}
+ else if(updown == -1) {
+ // Mouse has been moved and rmb is down and mouse pointer just
+ // entered a new inventory field (checked in the entry-if, this
+ // is the only action here that is generated by mouse movement)
+ if(m_selected_item != NULL && s.isValid()){
+ // Move 1 item
+ // TODO: middle mouse to move 10 items might be handy
+ move_amount = 1;
+ }
+ }
// Possibly send inventory action to server
if(move_amount > 0)
@@ -3212,6 +3226,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
m_selected_dragging = false;
m_selected_content_guess = ItemStack();
}
+ m_old_pointer = m_pointer;
}
if(event.EventType==EET_GUI_EVENT) {