summaryrefslogtreecommitdiff
path: root/src/frame.c
diff options
context:
space:
mode:
authorrhp <rhp>2001-06-18 03:24:25 +0000
committerrhp <rhp>2001-06-18 03:24:25 +0000
commitd090d9f284e27aee37062c0e2f926075dc5b9a06 (patch)
tree13e71f3f64e7c0e7f5cbf352907f7a1d7e4bf20c /src/frame.c
parent59513231a57cba1c67ed574a660cc19e3ace9922 (diff)
downloadmetacity-d090d9f284e27aee37062c0e2f926075dc5b9a06.tar.gz
...
Diffstat (limited to 'src/frame.c')
-rw-r--r--src/frame.c858
1 files changed, 79 insertions, 779 deletions
diff --git a/src/frame.c b/src/frame.c
index f8efb9f9..02c9332d 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -22,165 +22,6 @@
#include "frame.h"
#include "errors.h"
#include "uislave.h"
-#include "colors.h"
-
-struct _MetaFrameActionGrab
-{
- MetaFrameAction action;
- /* initial mouse position for drags */
- int start_root_x, start_root_y;
- /* initial window size or initial window position for drags */
- int start_window_x, start_window_y;
- /* button doing the dragging */
- int start_button;
-};
-
-/* This lacks ButtonReleaseMask to avoid the auto-grab
- * since it breaks our popup menu
- */
-#define EVENT_MASK (SubstructureRedirectMask | \
- StructureNotifyMask | SubstructureNotifyMask | \
- ExposureMask | \
- ButtonPressMask | ButtonReleaseMask | \
- PointerMotionMask | PointerMotionHintMask | \
- EnterWindowMask | LeaveWindowMask)
-
-static void clear_tip (MetaFrame *frame);
-
-static guint draw_handler = 0;
-static GSList *draw_pending = NULL;
-
-static void
-meta_frame_init_info (MetaFrame *frame,
- MetaFrameInfo *info)
-{
- info->flags =
- META_FRAME_ALLOWS_MENU | META_FRAME_ALLOWS_RESIZE;
-
- if (frame->window->has_close_func)
- info->flags |= META_FRAME_ALLOWS_DELETE;
-
- if (frame->window->type == META_WINDOW_NORMAL)
- info->flags |= (META_FRAME_ALLOWS_ICONIFY | META_FRAME_ALLOWS_MAXIMIZE);
-
- if (!frame->window->has_maximize_func)
- info->flags &= ~META_FRAME_ALLOWS_MAXIMIZE;
-
- if (!frame->window->has_minimize_func)
- info->flags &= ~META_FRAME_ALLOWS_ICONIFY;
-
- if (frame->window->has_focus)
- info->flags |= META_FRAME_HAS_FOCUS;
-
- if (frame->window->shaded)
- info->flags |= META_FRAME_SHADED;
-
- if (frame->window->on_all_workspaces)
- info->flags |= META_FRAME_STUCK;
-
- info->drawable = None;
- info->xoffset = 0;
- info->yoffset = 0;
- info->display = frame->window->display->xdisplay;
- info->screen = frame->window->screen->xscreen;
- info->visual = frame->window->xvisual;
- info->depth = frame->window->depth;
- info->title = frame->window->title;
- info->width = frame->rect.width;
- info->height = frame->rect.height;
- info->colors = &(frame->window->screen->colors);
- info->current_control = frame->current_control;
- if (frame->grab)
- info->current_control_state = META_STATE_ACTIVE;
- else
- info->current_control_state = META_STATE_PRELIGHT;
-}
-
-void
-meta_frame_calc_geometry (MetaFrame *frame,
- int child_width, int child_height,
- MetaFrameGeometry *geomp)
-{
- MetaFrameInfo info;
- MetaFrameGeometry geom;
- MetaWindow *window;
-
- /* Remember this is called from the constructor
- * pre-X-window-creation.
- */
-
- window = frame->window;
-
- /* frame->rect isn't useful yet */
-
- meta_frame_init_info (frame, &info);
-
- /* these were from frame->rect so fix them up */
- info.width = child_width;
- if (window->shaded)
- info.height = 0;
- else
- info.height = child_height;
-
- if (!frame->theme_acquired)
- {
- frame->theme_data = window->screen->engine->acquire_frame (&info);
- frame->theme_acquired = TRUE;
- }
-
- geom.left_width = 0;
- geom.right_width = 0;
- geom.top_height = 0;
- geom.bottom_height = 0;
- geom.background_pixel =
- meta_screen_get_x_pixel (frame->window->screen,
- &frame->window->screen->colors.bg[META_STATE_NORMAL]);
-
- geom.shape_mask = None;
-
- window->screen->engine->fill_frame_geometry (&info, &geom,
- frame->theme_data);
-
- *geomp = geom;
-}
-
-static void
-set_background_none (MetaFrame *frame)
-{
- XSetWindowAttributes attrs;
-
- attrs.background_pixmap = None;
- XChangeWindowAttributes (frame->window->display->xdisplay,
- frame->xwindow,
- CWBackPixmap,
- &attrs);
-
-#if 0
- meta_debug_spew ("Frame size %d,%d %dx%d window size %d,%d %dx%d window pos %d,%d\n",
- frame->rect.x,
- frame->rect.y,
- frame->rect.width,
- frame->rect.height,
- frame->window->rect.x,
- frame->window->rect.y,
- frame->window->rect.width,
- frame->window->rect.height,
- frame->child_x,
- frame->child_y);
-#endif
-}
-
-static void
-set_background_color (MetaFrame *frame)
-{
- XSetWindowAttributes attrs;
-
- attrs.background_pixel = frame->bg_pixel;
- XChangeWindowAttributes (frame->window->display->xdisplay,
- frame->xwindow,
- CWBackPixel,
- &attrs);
-}
void
meta_window_ensure_frame (MetaWindow *window)
@@ -197,24 +38,18 @@ meta_window_ensure_frame (MetaWindow *window)
frame->window = window;
frame->xwindow = None;
- frame->theme_acquired = FALSE;
- frame->grab = NULL;
- frame->current_control = META_FRAME_CONTROL_NONE;
- frame->tooltip_timeout = 0;
frame->rect = window->rect;
frame->child_x = 0;
frame->child_y = 0;
frame->bottom_height = 0;
frame->right_width = 0;
- frame->bg_pixel = 0;
frame->mapped = FALSE;
-
- frame->edges_exposed = FALSE;
- frame->title_exposed = FALSE;
- attrs.event_mask = EVENT_MASK;
+ attrs.event_mask = SubstructureRedirectMask |
+ StructureNotifyMask | SubstructureNotifyMask |
+ EnterWindowMask | LeaveWindowMask;
frame->xwindow = XCreateWindow (window->display->xdisplay,
window->screen->xroot,
@@ -229,6 +64,9 @@ meta_window_ensure_frame (MetaWindow *window)
CWEventMask,
&attrs);
+ /* So our UI can find the window ID */
+ XFlush (window->display->xdisplay);
+
meta_verbose ("Frame for %s is 0x%lx\n", frame->window->desc, frame->xwindow);
meta_display_register_x_window (window->display, &frame->xwindow, window);
@@ -254,6 +92,8 @@ meta_window_ensure_frame (MetaWindow *window)
window->rect.x,
window->rect.y);
meta_error_trap_pop (window->display);
+
+ meta_ui_add_frame (window->screen->ui, frame->xwindow);
/* stick frame to the window */
window->frame = frame;
@@ -270,19 +110,7 @@ meta_window_destroy_frame (MetaWindow *window)
frame = window->frame;
- if (frame->title_exposed || frame->edges_exposed)
- {
- draw_pending = g_slist_remove (draw_pending, frame);
- }
-
- if (frame->tooltip_timeout)
- clear_tip (frame);
-
- if (frame->theme_data)
- {
- meta_frame_init_info (frame, &info);
- window->screen->engine->release_frame (&info, frame->theme_data);
- }
+ meta_ui_remove_frame (window->screen->ui, frame->xwindow);
/* Unparent the client window; it may be destroyed,
* thus the error trap.
@@ -315,6 +143,68 @@ meta_window_destroy_frame (MetaWindow *window)
meta_window_queue_calc_showing (window);
}
+
+MetaFrameFlags
+meta_frame_get_flags (MetaFrame *frame)
+{
+ MetaFrameFlags flags;
+
+ flags =
+ META_FRAME_ALLOWS_MENU | META_FRAME_ALLOWS_RESIZE;
+
+ if (frame->window->has_close_func)
+ flags |= META_FRAME_ALLOWS_DELETE;
+
+ if (frame->window->type == META_WINDOW_NORMAL)
+ flags |= (META_FRAME_ALLOWS_ICONIFY | META_FRAME_ALLOWS_MAXIMIZE);
+
+ if (!frame->window->has_maximize_func)
+ flags &= ~META_FRAME_ALLOWS_MAXIMIZE;
+
+ if (!frame->window->has_minimize_func)
+ flags &= ~META_FRAME_ALLOWS_MINIMIZE;
+
+ if (frame->window->has_focus)
+ flags |= META_FRAME_HAS_FOCUS;
+
+ if (frame->window->shaded)
+ flags |= META_FRAME_SHADED;
+
+ if (frame->window->on_all_workspaces)
+ flags |= META_FRAME_STUCK;
+}
+
+void
+meta_frame_calc_geometry (MetaFrame *frame,
+ MetaFrameGeometry *geomp)
+{
+ MetaFrameGeometry geom;
+ MetaWindow *window;
+
+ window = frame->window;
+
+ meta_ui_get_frame_geometry (window->screen->ui,
+ frame->xwindow,
+ &geom.top_height,
+ &geom.bottom_height,
+ &geom.left_width,
+ &geom.right_width);
+
+ *geomp = geom;
+}
+
+static void
+set_background_none (MetaFrame *frame)
+{
+ XSetWindowAttributes attrs;
+
+ attrs.background_pixmap = None;
+ XChangeWindowAttributes (frame->window->display->xdisplay,
+ frame->xwindow,
+ CWBackPixmap,
+ &attrs);
+}
+
void
meta_frame_sync_to_window (MetaFrame *frame,
gboolean need_move,
@@ -328,7 +218,8 @@ meta_frame_sync_to_window (MetaFrame *frame,
frame->bg_pixel);
/* set bg to none to avoid flicker */
- set_background_none (frame);
+ if (need_resize)
+ set_background_none (frame);
if (need_move && need_resize)
XMoveResizeWindow (frame->window->display->xdisplay,
@@ -346,396 +237,18 @@ meta_frame_sync_to_window (MetaFrame *frame,
XResizeWindow (frame->window->display->xdisplay,
frame->xwindow,
frame->rect.width,
- frame->rect.height);
-
- /* also syncs bg_pixel */
- set_background_color (frame);
- meta_frame_queue_draw (frame);
-}
-
-static void
-meta_frame_draw_now (MetaFrame *frame,
- int x, int y, int width, int height)
-{
- MetaFrameInfo info;
- Pixmap p;
- XGCValues vals;
-
- if (frame->xwindow == None)
- return;
-
- meta_frame_init_info (frame, &info);
-
- if (width < 0)
- width = frame->rect.width;
-
- if (height < 0)
- height = frame->rect.height;
-
- if (width == 0 || height == 0)
- return;
-
- p = XCreatePixmap (frame->window->display->xdisplay,
- frame->xwindow,
- width, height,
- frame->window->screen->visual_info.depth);
-
- vals.foreground = frame->bg_pixel;
- XChangeGC (frame->window->display->xdisplay,
- frame->window->screen->scratch_gc,
- GCForeground,
- &vals);
-
- XFillRectangle (frame->window->display->xdisplay,
- p,
- frame->window->screen->scratch_gc,
- 0, 0,
- width, height);
-
- info.drawable = p;
- info.xoffset = - x;
- info.yoffset = - y;
-
- frame->window->screen->engine->expose_frame (&info,
- 0, 0, width, height,
- frame->theme_data);
-
- XCopyArea (frame->window->display->xdisplay,
- p, frame->xwindow,
- frame->window->screen->scratch_gc,
- 0, 0,
- width, height,
- x, y);
+ frame->rect.height);
- XFreePixmap (frame->window->display->xdisplay,
- p);
-
- frame->title_exposed = FALSE;
- frame->edges_exposed = FALSE;
-}
-
-static gboolean
-draw_idle (gpointer data)
-{
- GSList *tmp;
-
- tmp = draw_pending;
- while (tmp != NULL)
- {
- int yoffset;
- MetaFrame *frame;
-
- frame = tmp->data;
-
- yoffset = 0;
- if (!frame->title_exposed)
- yoffset += frame->child_y;
-
- meta_frame_draw_now (frame, 0, yoffset,
- frame->rect.width,
- frame->rect.height - yoffset);
- tmp = tmp->next;
- }
- g_slist_free (draw_pending);
- draw_pending = NULL;
-
- draw_handler = 0;
- return FALSE;
+ if (need_resize)
+ meta_ui_reset_frame_bg (frame->window->screen->ui,
+ frame->xwindow);
}
void
meta_frame_queue_draw (MetaFrame *frame)
{
- if (draw_handler == 0)
- draw_handler = g_idle_add (draw_idle, NULL);
-
- if (!(frame->title_exposed || frame->edges_exposed))
- draw_pending = g_slist_prepend (draw_pending, frame);
-
- frame->title_exposed = TRUE;
- frame->edges_exposed = TRUE;
-}
-
-static void
-frame_query_root_pointer (MetaFrame *frame,
- int *x, int *y)
-{
- Window root_return, child_return;
- int root_x_return, root_y_return;
- int win_x_return, win_y_return;
- unsigned int mask_return;
-
- XQueryPointer (frame->window->display->xdisplay,
- frame->xwindow,
- &root_return,
- &child_return,
- &root_x_return,
- &root_y_return,
- &win_x_return,
- &win_y_return,
- &mask_return);
-
- if (x)
- *x = root_x_return;
- if (y)
- *y = root_y_return;
-}
-
-static void
-show_tip_now (MetaFrame *frame)
-{
- const char *tiptext;
-
- tiptext = NULL;
- switch (frame->current_control)
- {
- case META_FRAME_CONTROL_TITLE:
- break;
- case META_FRAME_CONTROL_DELETE:
- tiptext = _("Close Window");
- break;
- case META_FRAME_CONTROL_MENU:
- tiptext = _("Menu");
- break;
- case META_FRAME_CONTROL_ICONIFY:
- tiptext = _("Minimize Window");
- break;
- case META_FRAME_CONTROL_MAXIMIZE:
- tiptext = _("Maximize Window");
- break;
- case META_FRAME_CONTROL_RESIZE_SE:
- break;
- case META_FRAME_CONTROL_RESIZE_S:
- break;
- case META_FRAME_CONTROL_RESIZE_SW:
- break;
- case META_FRAME_CONTROL_RESIZE_N:
- break;
- case META_FRAME_CONTROL_RESIZE_NE:
- break;
- case META_FRAME_CONTROL_RESIZE_NW:
- break;
- case META_FRAME_CONTROL_RESIZE_W:
- break;
- case META_FRAME_CONTROL_RESIZE_E:
- break;
- case META_FRAME_CONTROL_NONE:
- break;
- }
-
- if (tiptext)
- {
- int x, y, width, height;
- MetaFrameInfo info;
-
- meta_frame_init_info (frame, &info);
- frame->window->screen->engine->get_control_rect (&info,
- frame->current_control,
- &x, &y, &width, &height,
- frame->theme_data);
-
- /* Display tip a couple pixels below control */
- meta_screen_show_tip (frame->window->screen,
- frame->rect.x + x,
- frame->rect.y + y + height + 2,
- tiptext);
- }
-}
-
-static gboolean
-tip_timeout_func (gpointer data)
-{
- MetaFrame *frame;
-
- frame = data;
-
- show_tip_now (frame);
-
- return FALSE;
-}
-
-#define TIP_DELAY 250
-static void
-queue_tip (MetaFrame *frame)
-{
- if (frame->tooltip_timeout)
- g_source_remove (frame->tooltip_timeout);
-
- frame->tooltip_timeout = g_timeout_add (250,
- tip_timeout_func,
- frame);
-}
-
-static void
-clear_tip (MetaFrame *frame)
-{
- if (frame->tooltip_timeout)
- {
- g_source_remove (frame->tooltip_timeout);
- frame->tooltip_timeout = 0;
- }
- meta_screen_hide_tip (frame->window->screen);
-}
-
-static MetaFrameControl
-frame_get_control (MetaFrame *frame,
- int x, int y)
-{
- MetaFrameInfo info;
-
- if (x < 0 || y < 0 ||
- x > frame->rect.width || y > frame->rect.height)
- return META_FRAME_CONTROL_NONE;
-
- meta_frame_init_info (frame, &info);
-
- return frame->window->screen->engine->get_control (&info,
- x, y,
- frame->theme_data);
-}
-
-static void
-update_move (MetaFrame *frame,
- int x,
- int y)
-{
- int dx, dy;
-
- dx = x - frame->grab->start_root_x;
- dy = y - frame->grab->start_root_y;
-
- frame->window->user_has_moved = TRUE;
- meta_window_move (frame->window,
- frame->grab->start_window_x + dx,
- frame->grab->start_window_y + dy);
-}
-
-static void
-update_resize_se (MetaFrame *frame,
- int x, int y)
-{
- int dx, dy;
-
- dx = x - frame->grab->start_root_x;
- dy = y - frame->grab->start_root_y;
-
- frame->window->user_has_resized = TRUE;
- meta_window_resize (frame->window,
- frame->grab->start_window_x + dx,
- frame->grab->start_window_y + dy);
-}
-
-static void
-update_current_control (MetaFrame *frame,
- int x_root, int y_root)
-{
- MetaFrameControl old;
-
- if (frame->grab)
- return;
-
- old = frame->current_control;
-
- frame->current_control = frame_get_control (frame,
- x_root - frame->rect.x,
- y_root - frame->rect.y);
-
- if (old != frame->current_control)
- {
- meta_frame_queue_draw (frame);
-
- if (frame->current_control == META_FRAME_CONTROL_NONE)
- clear_tip (frame);
- else
- queue_tip (frame);
- }
-}
-
-static void
-grab_action (MetaFrame *frame,
- MetaFrameAction action,
- Time time)
-{
- meta_verbose ("Grabbing action %d\n", action);
-
- frame->grab = g_new0 (MetaFrameActionGrab, 1);
-
- if (XGrabPointer (frame->window->display->xdisplay,
- frame->xwindow,
- False,
- ButtonPressMask | ButtonReleaseMask |
- PointerMotionMask | PointerMotionHintMask,
- GrabModeAsync, GrabModeAsync,
- None,
- None,
- time) != GrabSuccess)
- meta_warning ("Grab for frame action failed\n");
-
- frame->grab->action = action;
-
- /* display ACTIVE state */
- meta_frame_queue_draw (frame);
-
- clear_tip (frame);
-}
-
-static void
-ungrab_action (MetaFrame *frame,
- Time time)
-{
- int x, y;
-
- meta_verbose ("Ungrabbing action %d\n", frame->grab->action);
-
- XUngrabPointer (frame->window->display->xdisplay,
- time);
-
- g_free (frame->grab);
- frame->grab = NULL;
-
- frame_query_root_pointer (frame, &x, &y);
- update_current_control (frame, x, y);
-
- /* undisplay ACTIVE state */
- meta_frame_queue_draw (frame);
-
- queue_tip (frame);
-}
-
-static void
-get_menu_items (MetaFrame *frame,
- MetaFrameInfo *info,
- MetaMessageWindowMenuOps *ops,
- MetaMessageWindowMenuOps *insensitive)
-{
- *ops = 0;
- *insensitive = 0;
-
- if (info->flags & META_FRAME_CONTROL_MAXIMIZE)
- {
- if (frame->window->maximized)
- *ops |= META_MESSAGE_MENU_UNMAXIMIZE;
- else
- *ops |= META_MESSAGE_MENU_MAXIMIZE;
- }
-
- if (frame->window->shaded)
- *ops |= META_MESSAGE_MENU_UNSHADE;
- else
- *ops |= META_MESSAGE_MENU_SHADE;
-
- if (frame->window->on_all_workspaces)
- *ops |= META_MESSAGE_MENU_UNSTICK;
- else
- *ops |= META_MESSAGE_MENU_STICK;
-
- *ops |= (META_MESSAGE_MENU_DELETE | META_MESSAGE_MENU_WORKSPACES | META_MESSAGE_MENU_MINIMIZE);
-
- if (!(info->flags & META_FRAME_CONTROL_ICONIFY))
- *insensitive |= META_MESSAGE_MENU_MINIMIZE;
-
- if (!(info->flags & META_FRAME_CONTROL_DELETE))
- *insensitive |= META_MESSAGE_MENU_DELETE;
+ meta_ui_queue_frame_draw (frame->window->screen->ui,
+ frame->xwindow);
}
gboolean
@@ -749,204 +262,10 @@ meta_frame_event (MetaFrame *frame,
case KeyRelease:
break;
case ButtonPress:
- /* you can use button 2 to move a window without raising it */
- if (event->xbutton.button == 1)
- meta_window_raise (frame->window);
-
- update_current_control (frame,
- event->xbutton.x_root,
- event->xbutton.y_root);
-
- if (frame->grab == NULL)
- {
- MetaFrameControl control;
- control = frame->current_control;
-
- if (control == META_FRAME_CONTROL_TITLE &&
- event->xbutton.button == 1 &&
- meta_display_is_double_click (frame->window->display))
- {
- meta_verbose ("Double click on title\n");
-
- /* FIXME this catches double click that starts elsewhere
- * with the second click on title, maybe no one will
- * ever notice
- */
-
- if (frame->window->shaded)
- meta_window_unshade (frame->window);
- else
- meta_window_shade (frame->window);
- }
- else if (((control == META_FRAME_CONTROL_TITLE ||
- control == META_FRAME_CONTROL_NONE) &&
- event->xbutton.button == 1) ||
- event->xbutton.button == 2)
- {
- meta_verbose ("Begin move on %s\n",
- frame->window->desc);
- grab_action (frame, META_FRAME_ACTION_MOVING,
- event->xbutton.time);
- frame->grab->start_root_x = event->xbutton.x_root;
- frame->grab->start_root_y = event->xbutton.y_root;
- /* pos of client in root coords */
- frame->grab->start_window_x =
- frame->rect.x + frame->window->rect.x;
- frame->grab->start_window_y =
- frame->rect.y + frame->window->rect.y;
- frame->grab->start_button = event->xbutton.button;
- }
- else if (control == META_FRAME_CONTROL_DELETE &&
- event->xbutton.button == 1)
- {
- meta_verbose ("Close control clicked on %s\n",
- frame->window->desc);
- grab_action (frame, META_FRAME_ACTION_DELETING,
- event->xbutton.time);
- frame->grab->start_button = event->xbutton.button;
- }
- else if (control == META_FRAME_CONTROL_MAXIMIZE &&
- event->xbutton.button == 1)
- {
- meta_verbose ("Maximize control clicked on %s\n",
- frame->window->desc);
- grab_action (frame, META_FRAME_ACTION_TOGGLING_MAXIMIZE,
- event->xbutton.time);
- frame->grab->start_button = event->xbutton.button;
- }
- else if (control == META_FRAME_CONTROL_RESIZE_SE &&
- event->xbutton.button == 1)
- {
- meta_verbose ("Resize control clicked on %s\n",
- frame->window->desc);
- grab_action (frame, META_FRAME_ACTION_RESIZING_SE,
- event->xbutton.time);
- frame->grab->start_root_x = event->xbutton.x_root;
- frame->grab->start_root_y = event->xbutton.y_root;
- frame->grab->start_window_x = frame->window->rect.width;
- frame->grab->start_window_y = frame->window->rect.height;
- frame->grab->start_button = event->xbutton.button;
- }
- else if (control == META_FRAME_CONTROL_MENU &&
- event->xbutton.button == 1)
- {
- int x, y, width, height;
- MetaFrameInfo info;
- MetaMessageWindowMenuOps ops;
- MetaMessageWindowMenuOps insensitive;
-
- meta_verbose ("Menu control clicked on %s\n",
- frame->window->desc);
-
- meta_frame_init_info (frame, &info);
- frame->window->screen->engine->get_control_rect (&info,
- META_FRAME_CONTROL_MENU,
- &x, &y, &width, &height,
- frame->theme_data);
-
- /* Let the menu get a grab. The user could release button
- * before the menu gets the grab, in which case the
- * menu gets somewhat confused, but it's not that
- * disastrous.
- */
- XUngrabPointer (frame->window->display->xdisplay,
- event->xbutton.time);
-
- get_menu_items (frame, &info, &ops, &insensitive);
-
- meta_ui_slave_show_window_menu (frame->window->screen->uislave,
- frame->window,
- frame->rect.x + x,
- frame->rect.y + y + height,
- event->xbutton.button,
- ops, insensitive,
- event->xbutton.time);
- }
- }
break;
case ButtonRelease:
- if (frame->grab)
- meta_debug_spew ("Here! grab %p action %d buttons %d %d\n",
- frame->grab, frame->grab->action, frame->grab->start_button, event->xbutton.button);
- if (frame->grab &&
- event->xbutton.button == frame->grab->start_button)
- {
- switch (frame->grab->action)
- {
- case META_FRAME_ACTION_MOVING:
- update_move (frame, event->xbutton.x_root, event->xbutton.y_root);
- ungrab_action (frame, event->xbutton.time);
- update_current_control (frame,
- event->xbutton.x_root, event->xbutton.y_root);
- break;
-
- case META_FRAME_ACTION_RESIZING_SE:
- update_resize_se (frame, event->xbutton.x_root, event->xbutton.y_root);
- ungrab_action (frame, event->xbutton.time);
- update_current_control (frame,
- event->xbutton.x_root, event->xbutton.y_root);
- break;
-
- case META_FRAME_ACTION_DELETING:
- /* Must ungrab before getting "real" control position */
- ungrab_action (frame, event->xbutton.time);
- update_current_control (frame,
- event->xbutton.x_root,
- event->xbutton.y_root);
- /* delete if we're still over the button */
- if (frame->current_control == META_FRAME_CONTROL_DELETE)
- meta_window_delete (frame->window, event->xbutton.time);
- break;
- case META_FRAME_ACTION_TOGGLING_MAXIMIZE:
- /* Must ungrab before getting "real" control position */
- ungrab_action (frame, event->xbutton.time);
- update_current_control (frame,
- event->xbutton.x_root,
- event->xbutton.y_root);
- /* delete if we're still over the button */
- if (frame->current_control == META_FRAME_CONTROL_MAXIMIZE)
- {
- if (frame->window->maximized)
- meta_window_unmaximize (frame->window);
- else
- meta_window_maximize (frame->window);
- }
- break;
- default:
- meta_warning ("Unhandled action in button release\n");
- break;
- }
- }
break;
case MotionNotify:
- {
- int x, y;
-
- frame_query_root_pointer (frame, &x, &y);
- if (frame->grab)
- {
- switch (frame->grab->action)
- {
- case META_FRAME_ACTION_MOVING:
- update_move (frame, x, y);
- break;
-
- case META_FRAME_ACTION_RESIZING_SE:
- update_resize_se (frame, x, y);
- break;
-
- case META_FRAME_ACTION_NONE:
-
- break;
- default:
- break;
- }
- }
- else
- {
- update_current_control (frame, x, y);
- }
- }
break;
case EnterNotify:
/* We handle it here if a decorated window
@@ -957,7 +276,6 @@ meta_frame_event (MetaFrame *frame,
event->xcrossing.time);
break;
case LeaveNotify:
- update_current_control (frame, -1, -1);
break;
case FocusIn:
break;
@@ -966,13 +284,6 @@ meta_frame_event (MetaFrame *frame,
case KeymapNotify:
break;
case Expose:
- {
- gboolean title_was_exposed = frame->title_exposed;
- meta_frame_queue_draw (frame);
- if (!title_was_exposed &&
- event->xexpose.y > frame->child_y)
- frame->title_exposed = FALSE;
- }
break;
case GraphicsExpose:
break;
@@ -995,12 +306,8 @@ meta_frame_event (MetaFrame *frame,
}
break;
case UnmapNotify:
- if (frame->grab)
- ungrab_action (frame, CurrentTime);
break;
case MapNotify:
- if (frame->grab)
- ungrab_action (frame, CurrentTime);
break;
case MapRequest:
break;
@@ -1009,13 +316,6 @@ meta_frame_event (MetaFrame *frame,
case ConfigureNotify:
break;
case ConfigureRequest:
- {
- /* This is a request from the UISlave, or else a client
- * that's completely out of line. We call
- * meta_window_move_resize() using this information.
- */
-
- }
break;
case GravityNotify:
break;