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:
authorTon Roosendaal <ton@blender.org>2009-01-04 22:17:34 +0300
committerTon Roosendaal <ton@blender.org>2009-01-04 22:17:34 +0300
commitdf6caaed1ebe6076893853a2573a747a28028f22 (patch)
tree9265ca8805a03e9d27e6afe1dc4a8df23e2f6632 /source/blender
parent49631b6e409d458d7023b8d8ceff5de58a7597e8 (diff)
2.5
Small cleanup in region-based cursor handling. - callback was in spacetype, now in regiontype - made screen listener catch ND_MODE notifier and call the active region cursor callback, if it's there.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_screen.h6
-rw-r--r--source/blender/editors/screen/screen_edit.c34
-rw-r--r--source/blender/editors/space_text/space_text.c9
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c14
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c2
5 files changed, 43 insertions, 22 deletions
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index ab91612defe..04b27f7bf3c 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -75,8 +75,6 @@ typedef struct SpaceType {
void (*operatortypes)(void);
/* add default items to WM keymap */
void (*keymap)(struct wmWindowManager *);
- /* sets default cursor per region */
- void (*cursor)(struct wmWindow *win, struct ARegion *ar);
/* return context data */
int (*context)(const struct bContext *, const void *, struct bContextDataResult *);
@@ -111,7 +109,9 @@ typedef struct ARegionType {
void (*operatortypes)(void);
/* add own items to keymap */
void (*keymap)(struct wmWindowManager *);
-
+ /* allows default cursor per region */
+ void (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
+
/* return context data */
int (*context)(const struct bContext *, const void *, struct bContextDataResult *);
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 97f45ff05bf..a838e833883 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -907,6 +907,24 @@ bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc)
return newsc;
}
+/* screen sets cursor based on swinid */
+static void region_cursor_set(wmWindow *win, int swinid)
+{
+ ScrArea *sa= win->screen->areabase.first;
+
+ for(;sa; sa= sa->next) {
+ ARegion *ar= sa->regionbase.first;
+ for(;ar; ar= ar->next) {
+ if(ar->swinid == swinid) {
+ if(ar->type && ar->type->cursor)
+ ar->type->cursor(win, sa, ar);
+ else
+ WM_cursor_set(win, CURSOR_STD);
+ return;
+ }
+ }
+ }
+}
void ED_screen_do_listen(wmWindow *win, wmNotifier *note)
{
@@ -919,6 +937,9 @@ void ED_screen_do_listen(wmWindow *win, wmNotifier *note)
case NC_SCREEN:
if(note->action==NA_EDITED)
win->screen->do_draw= win->screen->do_refresh= 1;
+ case NC_SCENE:
+ if(note->data==ND_MODE)
+ region_cursor_set(win, note->swinid);
break;
}
}
@@ -1145,18 +1166,7 @@ void ED_screen_set_subwinactive(wmWindow *win, wmEvent *event)
screen_cursor_set(win, event);
}
else if(oldswin!=scr->subwinactive) {
- /* cursor space type switching */
- for(sa= scr->areabase.first; sa; sa= sa->next) {
- for(ar= sa->regionbase.first; ar; ar= ar->next) {
- if(ar->swinid==scr->subwinactive) {
- if(sa->type->cursor)
- sa->type->cursor(win, ar);
- else
- WM_cursor_set(win, CURSOR_STD);
- }
- }
-
- }
+ region_cursor_set(win, scr->subwinactive);
}
}
}
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index 14caafe722e..4187bd13cb1 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -157,12 +157,9 @@ static void text_operatortypes(void)
}
-static void text_cursor(wmWindow *win, ARegion *ar)
+static void text_cursor(wmWindow *win, ScrArea *sa, ARegion *ar)
{
- if(ar->regiontype==RGN_TYPE_WINDOW)
- WM_cursor_set(win, BC_TEXTEDITCURSOR);
- else
- WM_cursor_set(win, CURSOR_STD);
+ WM_cursor_set(win, BC_TEXTEDITCURSOR);
}
static void text_keymap(struct wmWindowManager *wm)
@@ -216,7 +213,6 @@ void ED_spacetype_text(void)
st->init= text_init;
st->duplicate= text_duplicate;
st->operatortypes= text_operatortypes;
- st->cursor= text_cursor;
st->keymap= text_keymap;
/* regions: main window */
@@ -226,6 +222,7 @@ void ED_spacetype_text(void)
art->draw= text_main_area_draw;
art->listener= text_main_area_listener;
art->keymapflag= ED_KEYMAP_VIEW2D;
+ art->cursor= text_cursor;
BLI_addhead(&st->regiontypes, art);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 9ca07e15e01..507a4d9735f 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -271,6 +271,19 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
}
}
+/* concept is to retrieve cursor type context-less */
+static void view3d_main_area_cursor(wmWindow *win, ScrArea *sa, ARegion *ar)
+{
+ Scene *scene= win->screen->scene;
+
+ if(scene->obedit) {
+ WM_cursor_set(win, CURSOR_EDIT);
+ }
+ else {
+ WM_cursor_set(win, CURSOR_STD);
+ }
+}
+
/* add handlers, stuff you only do once or on area/region changes */
static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar)
{
@@ -391,6 +404,7 @@ void ED_spacetype_view3d(void)
art->draw= view3d_main_area_draw;
art->init= view3d_main_area_init;
art->listener= view3d_main_area_listener;
+ art->cursor= view3d_main_area_cursor;
BLI_addhead(&st->regiontypes, art);
/* regions: header */
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index caa4731a524..843137cbec1 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -867,7 +867,7 @@ void wm_event_do_handlers(bContext *C)
/* XXX to solve, here screen handlers? */
if(!wm_event_always_pass(event))
- ED_screen_set_subwinactive(win, event); /* state variables in screen */
+ ED_screen_set_subwinactive(win, event); /* state variables in screen, cursors */
for(sa= win->screen->areabase.first; sa; sa= sa->next) {
if(wm_event_always_pass(event) || wm_event_prev_inside_i(event, &sa->totrct)) {