mirror of
https://github.com/brl/mutter.git
synced 2025-02-18 06:04:10 +00:00
Added MutterWindow::no-shadow property
Allows to specify that a window that otherwise would have shadow should not.
This commit is contained in:
parent
770a6f0138
commit
5780ffad12
@ -186,7 +186,6 @@ struct _MutterWindowPrivate
|
|||||||
gint map_in_progress;
|
gint map_in_progress;
|
||||||
gint destroy_in_progress;
|
gint destroy_in_progress;
|
||||||
|
|
||||||
guint needs_shadow : 1;
|
|
||||||
guint shaped : 1;
|
guint shaped : 1;
|
||||||
guint destroy_pending : 1;
|
guint destroy_pending : 1;
|
||||||
guint argb32 : 1;
|
guint argb32 : 1;
|
||||||
@ -200,6 +199,8 @@ struct _MutterWindowPrivate
|
|||||||
guint needs_repair : 1;
|
guint needs_repair : 1;
|
||||||
|
|
||||||
guint needs_destroy : 1;
|
guint needs_destroy : 1;
|
||||||
|
|
||||||
|
guint no_shadow : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -207,7 +208,8 @@ enum
|
|||||||
PROP_MCW_META_WINDOW = 1,
|
PROP_MCW_META_WINDOW = 1,
|
||||||
PROP_MCW_META_SCREEN,
|
PROP_MCW_META_SCREEN,
|
||||||
PROP_MCW_X_WINDOW,
|
PROP_MCW_X_WINDOW,
|
||||||
PROP_MCW_X_WINDOW_ATTRIBUTES
|
PROP_MCW_X_WINDOW_ATTRIBUTES,
|
||||||
|
PROP_MCW_NO_SHADOW,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mutter_window_class_init (MutterWindowClass *klass);
|
static void mutter_window_class_init (MutterWindowClass *klass);
|
||||||
@ -282,6 +284,16 @@ mutter_window_class_init (MutterWindowClass *klass)
|
|||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_MCW_X_WINDOW_ATTRIBUTES,
|
PROP_MCW_X_WINDOW_ATTRIBUTES,
|
||||||
pspec);
|
pspec);
|
||||||
|
|
||||||
|
pspec = g_param_spec_boolean ("no-shadow",
|
||||||
|
"No shadow",
|
||||||
|
"Do not add shaddow to this window",
|
||||||
|
FALSE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
|
||||||
|
|
||||||
|
g_object_class_install_property (object_class,
|
||||||
|
PROP_MCW_NO_SHADOW,
|
||||||
|
pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -432,7 +444,8 @@ mutter_window_set_property (GObject *object,
|
|||||||
const GValue *value,
|
const GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
MutterWindowPrivate *priv = MUTTER_WINDOW (object)->priv;
|
MutterWindow *mw = MUTTER_WINDOW (object);
|
||||||
|
MutterWindowPrivate *priv = mw->priv;
|
||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
@ -448,6 +461,48 @@ mutter_window_set_property (GObject *object,
|
|||||||
case PROP_MCW_X_WINDOW_ATTRIBUTES:
|
case PROP_MCW_X_WINDOW_ATTRIBUTES:
|
||||||
priv->attrs = *((XWindowAttributes*)g_value_get_boxed (value));
|
priv->attrs = *((XWindowAttributes*)g_value_get_boxed (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_MCW_NO_SHADOW:
|
||||||
|
{
|
||||||
|
gboolean oldv = priv->no_shadow ? TRUE : FALSE;
|
||||||
|
gboolean newv = g_value_get_boolean (value);
|
||||||
|
|
||||||
|
if (oldv == newv)
|
||||||
|
return;
|
||||||
|
|
||||||
|
priv->no_shadow = newv;
|
||||||
|
|
||||||
|
if (newv && priv->shadow)
|
||||||
|
{
|
||||||
|
clutter_container_remove_actor (CLUTTER_CONTAINER (object),
|
||||||
|
priv->shadow);
|
||||||
|
priv->shadow = NULL;
|
||||||
|
}
|
||||||
|
else if (!newv && !priv->shadow && mutter_window_has_shadow (mw))
|
||||||
|
{
|
||||||
|
guint w, h;
|
||||||
|
MetaDisplay *display = meta_screen_get_display (priv->screen);
|
||||||
|
Mutter *compositor;
|
||||||
|
|
||||||
|
compositor = (Mutter*) meta_display_get_compositor (display);
|
||||||
|
|
||||||
|
clutter_actor_get_size (CLUTTER_ACTOR (mw), &w, &h);
|
||||||
|
|
||||||
|
priv->shadow =
|
||||||
|
tidy_texture_frame_new (CLUTTER_TEXTURE (compositor->shadow_src),
|
||||||
|
MAX_TILE_SZ,
|
||||||
|
MAX_TILE_SZ,
|
||||||
|
MAX_TILE_SZ,
|
||||||
|
MAX_TILE_SZ);
|
||||||
|
|
||||||
|
clutter_actor_set_position (priv->shadow,
|
||||||
|
SHADOW_OFFSET_X , SHADOW_OFFSET_Y);
|
||||||
|
|
||||||
|
clutter_actor_set_size (priv->shadow, w, h);
|
||||||
|
|
||||||
|
clutter_container_add_actor (CLUTTER_CONTAINER (mw), priv->shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -476,6 +531,9 @@ mutter_window_get_property (GObject *object,
|
|||||||
case PROP_MCW_X_WINDOW_ATTRIBUTES:
|
case PROP_MCW_X_WINDOW_ATTRIBUTES:
|
||||||
g_value_set_boxed (value, &priv->attrs);
|
g_value_set_boxed (value, &priv->attrs);
|
||||||
break;
|
break;
|
||||||
|
case PROP_MCW_NO_SHADOW:
|
||||||
|
g_value_set_boolean (value, priv->no_shadow);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -565,6 +623,9 @@ mutter_window_has_shadow (MutterWindow *self)
|
|||||||
{
|
{
|
||||||
MutterWindowPrivate * priv = self->priv;
|
MutterWindowPrivate * priv = self->priv;
|
||||||
|
|
||||||
|
if (priv->no_shadow)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Always put a shadow around windows with a frame - This should override
|
* Always put a shadow around windows with a frame - This should override
|
||||||
* the restriction about not putting a shadow around shaped windows
|
* the restriction about not putting a shadow around shaped windows
|
||||||
|
Loading…
x
Reference in New Issue
Block a user