frames: Remove all other uses of meta_core_get
RIP.
This commit is contained in:
parent
7e66d2a484
commit
4496fb4447
@ -62,78 +62,6 @@ get_window (Display *xdisplay,
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
meta_core_get (Display *xdisplay,
|
|
||||||
Window xwindow,
|
|
||||||
...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
MetaCoreGetType request;
|
|
||||||
|
|
||||||
MetaDisplay *display = meta_display_for_x_display (xdisplay);
|
|
||||||
MetaWindow *window = meta_display_lookup_x_window (display, xwindow);
|
|
||||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
|
||||||
MetaWindowX11Private *priv = window_x11->priv;
|
|
||||||
|
|
||||||
va_start (args, xwindow);
|
|
||||||
|
|
||||||
request = va_arg (args, MetaCoreGetType);
|
|
||||||
|
|
||||||
/* Now, we special-case the first request slightly. Mostly, requests
|
|
||||||
* for information on windows which have no frame are errors.
|
|
||||||
* But sometimes we may want to know *whether* a window has a frame.
|
|
||||||
* In this case, pass the key META_CORE_WINDOW_HAS_FRAME
|
|
||||||
* as the *first* request, with a pointer to a boolean; if the window
|
|
||||||
* has no frame, this will be set to False and meta_core_get will
|
|
||||||
* exit immediately (so the values of any other requests will be
|
|
||||||
* undefined). Otherwise it will be set to True and meta_core_get will
|
|
||||||
* continue happily on its way.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (request != META_CORE_WINDOW_HAS_FRAME &&
|
|
||||||
(window == NULL || window->frame == NULL))
|
|
||||||
{
|
|
||||||
meta_bug ("No such frame window 0x%lx!\n", xwindow);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (request != META_CORE_GET_END)
|
|
||||||
{
|
|
||||||
gpointer answer = va_arg (args, gpointer);
|
|
||||||
|
|
||||||
switch (request)
|
|
||||||
{
|
|
||||||
case META_CORE_WINDOW_HAS_FRAME:
|
|
||||||
*((gboolean*)answer) = window != NULL && window->frame != NULL;
|
|
||||||
if (!*((gboolean*)answer)) goto out; /* see above */
|
|
||||||
break;
|
|
||||||
case META_CORE_GET_CLIENT_WIDTH:
|
|
||||||
*((gint*)answer) = priv->client_rect.width;
|
|
||||||
break;
|
|
||||||
case META_CORE_GET_CLIENT_HEIGHT:
|
|
||||||
*((gint*)answer) = priv->client_rect.height;
|
|
||||||
break;
|
|
||||||
case META_CORE_GET_MINI_ICON:
|
|
||||||
*((cairo_surface_t**)answer) = window->mini_icon;
|
|
||||||
break;
|
|
||||||
case META_CORE_GET_FRAME_RECT:
|
|
||||||
meta_window_get_frame_rect (window, ((MetaRectangle*)answer));
|
|
||||||
break;
|
|
||||||
case META_CORE_GET_THEME_VARIANT:
|
|
||||||
*((char**)answer) = window->gtk_theme_variant;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
meta_warning("Unknown window information request: %d\n", request);
|
|
||||||
}
|
|
||||||
|
|
||||||
request = va_arg (args, MetaCoreGetType);
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
va_end (args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_core_queue_frame_resize (Display *xdisplay,
|
meta_core_queue_frame_resize (Display *xdisplay,
|
||||||
Window frame_xwindow)
|
Window frame_xwindow)
|
||||||
|
@ -28,56 +28,6 @@
|
|||||||
#include <meta/common.h>
|
#include <meta/common.h>
|
||||||
#include <meta/boxes.h>
|
#include <meta/boxes.h>
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
META_CORE_GET_END = 0,
|
|
||||||
META_CORE_WINDOW_HAS_FRAME,
|
|
||||||
META_CORE_GET_CLIENT_WIDTH,
|
|
||||||
META_CORE_GET_CLIENT_HEIGHT,
|
|
||||||
META_CORE_GET_MINI_ICON,
|
|
||||||
META_CORE_GET_FRAME_RECT,
|
|
||||||
META_CORE_GET_THEME_VARIANT,
|
|
||||||
} MetaCoreGetType;
|
|
||||||
|
|
||||||
/* General information function about the given window. Pass in a sequence of
|
|
||||||
* pairs of MetaCoreGetTypes and pointers to variables; the variables will be
|
|
||||||
* filled with the requested values. End the list with META_CORE_GET_END.
|
|
||||||
* For example:
|
|
||||||
*
|
|
||||||
* meta_core_get (my_display, my_window,
|
|
||||||
* META_CORE_GET_FRAME_RECT, &rect,
|
|
||||||
* META_CORE_GET_END);
|
|
||||||
*
|
|
||||||
* If the window doesn't have a frame, this will raise a meta_bug. To suppress
|
|
||||||
* this behaviour, ask META_CORE_WINDOW_HAS_FRAME as the *first* question in
|
|
||||||
* the list. If the window has no frame, the answer to this question will be
|
|
||||||
* False, and anything else you asked will be undefined. Otherwise, the answer
|
|
||||||
* will be True. The answer will necessarily be True if you ask the question
|
|
||||||
* in any other position. The positions of all other questions don't matter.
|
|
||||||
*
|
|
||||||
* The reason for this function is that some parts of the program don't know
|
|
||||||
* about MetaWindows. But they *can* see core.h. So we used to have a whole
|
|
||||||
* load of functions which took a display and an X window, looked up the
|
|
||||||
* relevant MetaWindow, and returned information about it. The trouble with
|
|
||||||
* that is that looking up the MetaWindow is a nontrivial operation, and
|
|
||||||
* consolidating the calls in this way makes (for example) frame exposes
|
|
||||||
* 33% faster, according to valgrind.
|
|
||||||
*
|
|
||||||
* This function would perhaps be slightly better if the questions were
|
|
||||||
* represented by pointers, perhaps gchar*s, because then we could take
|
|
||||||
* advantage of gcc's automatic sentinel checking. On the other hand, this
|
|
||||||
* immediately suggests string comparison, and that's slow.
|
|
||||||
*
|
|
||||||
* Another possible improvement is that core.h still has a bunch of
|
|
||||||
* functions which can't be described by the formula "give a display and
|
|
||||||
* an X window, get a single value" (meta_core_user_move, for example), but
|
|
||||||
* which could theoretically be handled by this function if we relaxed the
|
|
||||||
* requirement that all questions should have exactly one argument.
|
|
||||||
*/
|
|
||||||
void meta_core_get (Display *xdisplay,
|
|
||||||
Window window,
|
|
||||||
...);
|
|
||||||
|
|
||||||
void meta_core_queue_frame_resize (Display *xdisplay,
|
void meta_core_queue_frame_resize (Display *xdisplay,
|
||||||
Window frame_xwindow);
|
Window frame_xwindow);
|
||||||
|
|
||||||
|
@ -34,6 +34,8 @@
|
|||||||
|
|
||||||
#include "core/window-private.h"
|
#include "core/window-private.h"
|
||||||
#include "core/frame.h"
|
#include "core/frame.h"
|
||||||
|
#include "x11/window-x11.h"
|
||||||
|
#include "x11/window-x11-private.h"
|
||||||
|
|
||||||
#include <cairo-xlib.h>
|
#include <cairo-xlib.h>
|
||||||
|
|
||||||
@ -432,15 +434,11 @@ static void
|
|||||||
meta_ui_frame_calc_geometry (MetaUIFrame *frame,
|
meta_ui_frame_calc_geometry (MetaUIFrame *frame,
|
||||||
MetaFrameGeometry *fgeom)
|
MetaFrameGeometry *fgeom)
|
||||||
{
|
{
|
||||||
int width, height;
|
|
||||||
MetaFrameFlags flags;
|
MetaFrameFlags flags;
|
||||||
MetaFrameType type;
|
MetaFrameType type;
|
||||||
MetaButtonLayout button_layout;
|
MetaButtonLayout button_layout;
|
||||||
|
MetaWindowX11 *window_x11 = META_WINDOW_X11 (frame->meta_window);
|
||||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow,
|
MetaWindowX11Private *priv = window_x11->priv;
|
||||||
META_CORE_GET_CLIENT_WIDTH, &width,
|
|
||||||
META_CORE_GET_CLIENT_HEIGHT, &height,
|
|
||||||
META_CORE_GET_END);
|
|
||||||
|
|
||||||
flags = meta_frame_get_flags (frame->meta_window->frame);
|
flags = meta_frame_get_flags (frame->meta_window->frame);
|
||||||
type = meta_window_get_window_type (frame->meta_window);
|
type = meta_window_get_window_type (frame->meta_window);
|
||||||
@ -454,7 +452,8 @@ meta_ui_frame_calc_geometry (MetaUIFrame *frame,
|
|||||||
type,
|
type,
|
||||||
frame->text_height,
|
frame->text_height,
|
||||||
flags,
|
flags,
|
||||||
width, height,
|
priv->client_rect.width,
|
||||||
|
priv->client_rect.height,
|
||||||
&button_layout,
|
&button_layout,
|
||||||
fgeom);
|
fgeom);
|
||||||
}
|
}
|
||||||
@ -495,17 +494,12 @@ static void
|
|||||||
meta_ui_frame_attach_style (MetaUIFrame *frame)
|
meta_ui_frame_attach_style (MetaUIFrame *frame)
|
||||||
{
|
{
|
||||||
MetaFrames *frames = frame->frames;
|
MetaFrames *frames = frame->frames;
|
||||||
gboolean has_frame;
|
const char *variant;
|
||||||
char *variant = NULL;
|
|
||||||
|
|
||||||
if (frame->style_info != NULL)
|
if (frame->style_info != NULL)
|
||||||
meta_style_info_unref (frame->style_info);
|
meta_style_info_unref (frame->style_info);
|
||||||
|
|
||||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
variant = frame->meta_window->gtk_theme_variant;
|
||||||
frame->xwindow,
|
|
||||||
META_CORE_WINDOW_HAS_FRAME, &has_frame,
|
|
||||||
META_CORE_GET_THEME_VARIANT, &variant,
|
|
||||||
META_CORE_GET_END);
|
|
||||||
|
|
||||||
if (variant == NULL || strcmp(variant, "normal") == 0)
|
if (variant == NULL || strcmp(variant, "normal") == 0)
|
||||||
frame->style_info = meta_style_info_ref (frames->normal_style);
|
frame->style_info = meta_style_info_ref (frames->normal_style);
|
||||||
@ -1405,19 +1399,12 @@ meta_frames_destroy_event (GtkWidget *widget,
|
|||||||
static cairo_region_t *
|
static cairo_region_t *
|
||||||
get_visible_frame_border_region (MetaUIFrame *frame)
|
get_visible_frame_border_region (MetaUIFrame *frame)
|
||||||
{
|
{
|
||||||
MetaRectangle frame_rect;
|
|
||||||
cairo_rectangle_int_t area;
|
cairo_rectangle_int_t area;
|
||||||
cairo_region_t *frame_border;
|
cairo_region_t *frame_border;
|
||||||
MetaFrameFlags flags;
|
MetaFrameFlags flags;
|
||||||
MetaFrameType type;
|
MetaFrameType type;
|
||||||
MetaFrameBorders borders;
|
MetaFrameBorders borders;
|
||||||
Display *display;
|
MetaRectangle frame_rect = frame->meta_window->rect;
|
||||||
|
|
||||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
|
||||||
|
|
||||||
meta_core_get (display, frame->xwindow,
|
|
||||||
META_CORE_GET_FRAME_RECT, &frame_rect,
|
|
||||||
META_CORE_GET_END);
|
|
||||||
|
|
||||||
flags = meta_frame_get_flags (frame->meta_window->frame);
|
flags = meta_frame_get_flags (frame->meta_window->frame);
|
||||||
type = meta_window_get_window_type (frame->meta_window);
|
type = meta_window_get_window_type (frame->meta_window);
|
||||||
@ -1473,10 +1460,7 @@ meta_ui_frame_get_mask (MetaUIFrame *frame,
|
|||||||
MetaFrameFlags flags;
|
MetaFrameFlags flags;
|
||||||
MetaRectangle frame_rect;
|
MetaRectangle frame_rect;
|
||||||
|
|
||||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
meta_window_get_frame_rect (frame->meta_window, &frame_rect);
|
||||||
frame->xwindow,
|
|
||||||
META_CORE_GET_FRAME_RECT, &frame_rect,
|
|
||||||
META_CORE_GET_END);
|
|
||||||
|
|
||||||
flags = meta_frame_get_flags (frame->meta_window->frame);
|
flags = meta_frame_get_flags (frame->meta_window->frame);
|
||||||
|
|
||||||
@ -1535,14 +1519,12 @@ meta_ui_frame_paint (MetaUIFrame *frame,
|
|||||||
MetaFrameFlags flags;
|
MetaFrameFlags flags;
|
||||||
MetaFrameType type;
|
MetaFrameType type;
|
||||||
cairo_surface_t *mini_icon;
|
cairo_surface_t *mini_icon;
|
||||||
int w, h;
|
|
||||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST];
|
MetaButtonState button_states[META_BUTTON_TYPE_LAST];
|
||||||
int i;
|
int i;
|
||||||
int button_type = -1;
|
int button_type = -1;
|
||||||
MetaButtonLayout button_layout;
|
MetaButtonLayout button_layout;
|
||||||
Display *display;
|
MetaWindowX11 *window_x11 = META_WINDOW_X11 (frame->meta_window);
|
||||||
|
MetaWindowX11Private *priv = window_x11->priv;
|
||||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
|
||||||
|
|
||||||
for (i = 0; i < META_BUTTON_TYPE_LAST; i++)
|
for (i = 0; i < META_BUTTON_TYPE_LAST; i++)
|
||||||
button_states[i] = META_BUTTON_STATE_NORMAL;
|
button_states[i] = META_BUTTON_STATE_NORMAL;
|
||||||
@ -1593,12 +1575,7 @@ meta_ui_frame_paint (MetaUIFrame *frame,
|
|||||||
if (button_type > -1)
|
if (button_type > -1)
|
||||||
button_states[button_type] = frame->button_state;
|
button_states[button_type] = frame->button_state;
|
||||||
|
|
||||||
meta_core_get (display, frame->xwindow,
|
mini_icon = frame->meta_window->mini_icon;
|
||||||
META_CORE_GET_MINI_ICON, &mini_icon,
|
|
||||||
META_CORE_GET_CLIENT_WIDTH, &w,
|
|
||||||
META_CORE_GET_CLIENT_HEIGHT, &h,
|
|
||||||
META_CORE_GET_END);
|
|
||||||
|
|
||||||
flags = meta_frame_get_flags (frame->meta_window->frame);
|
flags = meta_frame_get_flags (frame->meta_window->frame);
|
||||||
type = meta_window_get_window_type (frame->meta_window);
|
type = meta_window_get_window_type (frame->meta_window);
|
||||||
|
|
||||||
@ -1611,7 +1588,8 @@ meta_ui_frame_paint (MetaUIFrame *frame,
|
|||||||
cr,
|
cr,
|
||||||
type,
|
type,
|
||||||
flags,
|
flags,
|
||||||
w, h,
|
priv->client_rect.width,
|
||||||
|
priv->client_rect.height,
|
||||||
frame->text_layout,
|
frame->text_layout,
|
||||||
frame->text_height,
|
frame->text_height,
|
||||||
&button_layout,
|
&button_layout,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user