summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@src.gnome.org>2002-08-23 18:00:40 +0000
committerKeith Packard <keithp@src.gnome.org>2002-08-23 18:00:40 +0000
commit0f9bdb18f51fa25a85d790f121920df51e0f652e (patch)
tree51558c08fdefb6b6a71bf346a380c7d33932f2a5 /src
parent29d17da1ba6151171c30474d53bd2861ffbe00f8 (diff)
downloadmetacity-0f9bdb18f51fa25a85d790f121920df51e0f652e.tar.gz
metacity-0f9bdb18f51fa25a85d790f121920df51e0f652e.tar.bz2
Place cursors on frames, not root
Diffstat (limited to 'src')
-rw-r--r--src/core.c2
-rw-r--r--src/display.c5
-rw-r--r--src/frame.c19
-rw-r--r--src/frame.h4
4 files changed, 28 insertions, 2 deletions
diff --git a/src/core.c b/src/core.c
index e61eb38..abcaf9d 100644
--- a/src/core.c
+++ b/src/core.c
@@ -632,7 +632,7 @@ meta_core_set_screen_cursor (Display *xdisplay,
if (window == NULL || window->frame == NULL)
meta_bug ("No such frame window 0x%lx!\n", frame_on_screen);
- meta_screen_set_cursor (window->screen, cursor);
+ meta_frame_set_screen_cursor (window->frame, cursor);
}
void
diff --git a/src/display.c b/src/display.c
index 7715aeb..ea2508e 100644
--- a/src/display.c
+++ b/src/display.c
@@ -2247,6 +2247,8 @@ xcursor_for_op (MetaDisplay *display,
break;
}
+ if (cursor == META_CURSOR_DEFAULT)
+ return None;
return meta_display_create_x_cursor (display, cursor);
}
@@ -2305,7 +2307,8 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
}
#undef GRAB_MASK
- XFreeCursor (display->xdisplay, cursor);
+ if (cursor != None)
+ XFreeCursor (display->xdisplay, cursor);
}
gboolean
diff --git a/src/frame.c b/src/frame.c
index 06e14f1..dbca893 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -54,6 +54,7 @@ meta_window_ensure_frame (MetaWindow *window)
frame->child_y = 0;
frame->bottom_height = 0;
frame->right_width = 0;
+ frame->current_cursor = 0;
frame->mapped = FALSE;
@@ -351,3 +352,21 @@ meta_frame_queue_draw (MetaFrame *frame)
meta_ui_queue_frame_draw (frame->window->screen->ui,
frame->xwindow);
}
+
+void meta_frame_set_screen_cursor (MetaFrame *frame,
+ MetaCursor cursor)
+{
+ Cursor xcursor;
+ if (cursor == frame->current_cursor)
+ return;
+ frame->current_cursor = cursor;
+ if (cursor == META_CURSOR_DEFAULT)
+ XUndefineCursor (frame->window->display->xdisplay, frame->xwindow);
+ else
+ {
+ xcursor = meta_display_create_x_cursor (frame->window->display, cursor);
+ XDefineCursor (frame->window->display->xdisplay, frame->xwindow, xcursor);
+ XFreeCursor (frame->window->display->xdisplay, xcursor);
+ }
+}
+
diff --git a/src/frame.h b/src/frame.h
index 6447763..20f9469 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -43,6 +43,8 @@ struct _MetaFrame
/* reparent window */
Window xwindow;
+ MetaCursor current_cursor;
+
/* This rect is trusted info from where we put the
* frame, not the result of ConfigureNotify
*/
@@ -71,6 +73,8 @@ void meta_frame_sync_to_window (MetaFrame *frame,
gboolean need_move,
gboolean need_resize);
+void meta_frame_set_screen_cursor (MetaFrame *frame,
+ MetaCursor cursor);
#endif