Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-07-29 12:29:04 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-07-29 12:29:04 +0400
commit02608d257a9358e3bd756f1db8c8f53484c34c37 (patch)
tree46e155fde459e42761afc44c46e6f01ff087fa71 /source/blender/windowmanager
parentc9eb93d9fd967b47a4a6f45db6472772bb9c9af8 (diff)
add api call for initializing events from the windows eventstate.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h2
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c12
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c6
-rw-r--r--source/blender/windowmanager/intern/wm_window.c7
4 files changed, 20 insertions, 7 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 7cb24daaaef..76fb88c8d25 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -187,6 +187,8 @@ __attribute__ ((format(printf, 3, 4)))
;
void wm_event_add(struct wmWindow *win, const struct wmEvent *event_to_add);
+void wm_event_init_from_window(struct wmWindow *win, struct wmEvent *event);
+
/* at maximum, every timestep seconds it triggers event_type events */
struct wmTimer *WM_event_add_timer(struct wmWindowManager *wm, struct wmWindow *win, int event_type, double timestep);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index c33e67e00bd..862e4a41cf0 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -132,6 +132,14 @@ void wm_event_free_all(wmWindow *win)
}
}
+void wm_event_init_from_window(wmWindow *win, wmEvent *event)
+{
+ /* make sure we don't copy any owned pointers */
+ BLI_assert(win->eventstate->tablet_data == NULL);
+
+ *event = *(win->eventstate);
+}
+
/* ********************* notifiers, listeners *************** */
static int wm_test_duplicate_notifier(wmWindowManager *wm, unsigned int type, void *reference)
@@ -445,7 +453,9 @@ static void wm_handler_ui_cancel(bContext *C)
nexthandler = handler->next;
if (handler->ui_handle) {
- wmEvent event = *(win->eventstate);
+ wmEvent event;
+
+ wm_event_init_from_window(win, &event);
event.type = EVT_BUT_CANCEL;
handler->ui_handle(C, &event, handler->ui_userdata);
}
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 39584882d0e..f1a9f6dc007 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -978,7 +978,7 @@ static uiBlock *wm_enum_search_menu(bContext *C, ARegion *ar, void *arg_op)
uiPopupBoundsBlock(block, 6, 0, -UI_UNIT_Y); /* move it downwards, mouse over button */
uiEndBlock(C, block);
- event = *(win->eventstate); /* XXX huh huh? make api call */
+ wm_event_init_from_window(win, &event);
event.type = EVT_BUT_OPEN;
event.val = KM_PRESS;
event.customdata = but;
@@ -1751,7 +1751,7 @@ static uiBlock *wm_block_search_menu(bContext *C, ARegion *ar, void *UNUSED(arg_
uiPopupBoundsBlock(block, 6, 0, -UI_UNIT_Y); /* move it downwards, mouse over button */
uiEndBlock(C, block);
- event = *(win->eventstate); /* XXX huh huh? make api call */
+ wm_event_init_from_window(win, &event);
event.type = EVT_BUT_OPEN;
event.val = KM_PRESS;
event.customdata = but;
@@ -2988,7 +2988,7 @@ static void tweak_gesture_modal(bContext *C, const wmEvent *event)
if ((val = wm_gesture_evaluate(gesture))) {
wmEvent tevent;
- tevent = *(window->eventstate);
+ wm_event_init_from_window(window, &tevent);
if (gesture->event_type == LEFTMOUSE)
tevent.type = EVT_TWEAK_L;
else if (gesture->event_type == RIGHTMOUSE)
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index e0595e3c8ab..70541f7cec5 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -808,7 +808,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
* currently it seems to be common practice to generate new event for, but probably
* we'll need utility function for this? (sergey)
*/
- event = *(win->eventstate);
+ wm_event_init_from_window(win, &event);
event.type = MOUSEMOVE;
event.prevx = event.x;
event.prevy = event.y;
@@ -957,7 +957,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
win->eventstate->x = wx;
win->eventstate->y = wy;
- event = *(win->eventstate); /* copy last state, like mouse coords */
+ wm_event_init_from_window(win, &event); /* copy last state, like mouse coords */
/* activate region */
event.type = MOUSEMOVE;
@@ -1065,7 +1065,8 @@ static int wm_window_timer(const bContext *C)
else if (wt->event_type == TIMERAUTOSAVE)
wm_autosave_timer(C, wm, wt);
else if (win) {
- wmEvent event = *(win->eventstate);
+ wmEvent event;
+ wm_event_init_from_window(win, &event);
event.type = wt->event_type;
event.val = 0;