Compare commits

..

42 Commits

Author SHA1 Message Date
5f68c3a324 Bump version to 3.19.1
Update NEWS.
2015-10-29 15:50:20 +01:00
8ceae3b054 bluetooth: Show the Bluetooth menu when there were setup devices
If we detected that Bluetooth devices were setup, show the Bluetooth
menu so that users can easily turn Bluetooth back on.

This is a bit of a hack, as we cannot detect whether there is a
Bluetooth adapter at all when it's disabled, so we cannot tell whether
there were any Bluetooth devices setup, at some point. This state is
saved in the gnome-shell GSettings in the had-bluetooth-devices-setup
key.

Checking whether we saw Bluetooth devices at one point is a good
enough guess of whether there will be some in the future.

https://bugzilla.gnome.org/show_bug.cgi?id=723848
2015-10-28 11:51:07 +01:00
3fc5afaff1 Updated Czech translation 2015-10-28 10:56:48 +01:00
8b7464c648 st_theme_node_prerender_shadow: guard against failure to allocate a texture
If we are trying to render a shadow at a size that is very large in one
direction, but small in the other direction (so that we don't 9-slice
the texture), then allocating the backing texture for the offscreen
buffer may fail due to texture-size limits. Don't crash in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=757150
2015-10-27 15:51:40 -04:00
3e602b1765 calendar: Fix number formatting in some languages
Some languages require using a conversion modifier to display the day
number in a translated shape. fa_IR is affected for example.

https://bugzilla.gnome.org/show_bug.cgi?id=673235
2015-10-26 17:48:40 +01:00
5858028411 theme: tone down search entry stroke
https://bugzilla.gnome.org/show_bug.cgi?id=757011
2015-10-26 16:00:48 +01:00
2c682ace81 use osd colors for search (for classic)
https://bugzilla.gnome.org/show_bug.cgi?id=757011
2015-10-26 15:49:16 +01:00
45f3106814 Updated Romanian Translations 2015-10-25 10:19:21 +01:00
aa947f9948 Updated Romanian translation
(cherry picked from commit 9e64a1e3d6)
2015-10-24 17:02:27 +00:00
0c72d1fcbd ActivitiesButton: fix overview being toggled while still animating
Adds the missing checks for whether we should toggle the overview, on
button and key release.

https://bugzilla.gnome.org/show_bug.cgi?id=756925
2015-10-23 13:44:27 +02:00
6d22670307 Defend against failure of cairo_pattern_get_surface()
There are quite a few crashes in retrace.fedoraproject.org that are a result of
of cairo_pattern_get_surface() failing, then a subsequent call to
cairo_image_surface_get_width() crashing because no surface was returned to the
out parameter. Knowing what causes these is hard - my best guess is widgets getting
allocated at ridiculous sizes - but avoiding the crash makes sense in any case.

See https://bugzilla.redhat.com/show_bug.cgi?id=1206754

https://bugzilla.gnome.org/show_bug.cgi?id=756983
2015-10-22 15:14:55 -04:00
0b9e68e305 runDialog: Reload resource on 'rt'
Moving the default theme to a resource broke the 'rt' command;
reload the resource before the theme to fix it.

https://bugzilla.gnome.org/show_bug.cgi?id=738942
2015-10-21 20:54:30 +02:00
da8155cbe5 Updated Hungarian translation
(cherry picked from commit 10e4382a7d)
2015-10-21 06:08:52 +00:00
5b7a052e18 animation: do spinner animation with low priority
It's very unexpected that a spinner animation would
preempt idles from running.

This commit runs the spinner animation with a low
priority to ensure it doesn't take over the main
loop.

https://bugzilla.gnome.org/show_bug.cgi?id=754814
2015-10-20 17:10:06 -04:00
6f26e39082 animation: Run every 16ms not ever 14ms
Right now the spinner animation updates every 14ms.
60 frames per second would be one frame per 16.667ms,
so we're waking up more frequently than we need to.

This commit changes the wakeup to happen after 16ms.

https://bugzilla.gnome.org/show_bug.cgi?id=754814
2015-10-20 17:10:06 -04:00
489b96a310 gdm: don't emit start-session-when-ready from idle function
There's no point in delaying the emission.  We should do it
right away.

https://bugzilla.gnome.org/show_bug.cgi?id=754814
2015-10-20 17:10:06 -04:00
e65d90d624 Fix text-scaling-factor under wayland.
The text-scaling-factor GSetting was not being properly propagated
to clutter and the Pango font map; under X this is done by Clutter,
which listens to XSETTINGS directly.

https://bugzilla.gnome.org/show_bug.cgi?id=756447
2015-10-20 09:35:47 -04:00
9c74e22313 windowMenu: Ensure the source actor isn't sized 0x0
If the source actor is sized 0x0, the grabHelper will close the menu
on button release if the menu ends up flipped because in that case the
release event happens when the pointer is neither over the source
actor (since it's 0x0) or over the menu actor. A zero sized source
actor works for the non-flipped menu case because the menu's actor
itself ends up underneath the pointer.

https://bugzilla.gnome.org/show_bug.cgi?id=756605
2015-10-20 15:00:33 +02:00
48a1fce151 Add RLM as appropriate 2015-10-18 17:22:24 +04:00
83e7f6f496 windowManager: fix fullscreen clone being left around
If we get another effect on the same actor, we should make sure to
remove the clone through the "overwrite" methods provided by Tweener, or
there will be a race that might end up with a stray clone being left
around.

https://bugzilla.gnome.org/show_bug.cgi?id=756714
2015-10-16 13:47:14 -07:00
3c5c3a6597 Fixed some issues reported by Bjørn Lie in bug 740906. 2015-10-16 18:10:11 +02:00
1c3ea1649f windowManager: Fix fullscreen animations on dualscreen
The translation should describe the difference between the fullscreened
and unfullscreened position of the window - however we are currently
assuming a fullscreen position of (0, 0) instead of the monitor's origin,
which causes glitches on dualscreen setups.

https://bugzilla.gnome.org/show_bug.cgi?id=756697
2015-10-16 15:50:39 +02:00
48a54e8ac4 theme-node: Pass an explicit framebuffer to paint()
This allows us to paint to an offscreen buffer without using the
deprecated cogl_push_framebuffer/cogl_pop_framebuffer functions.
2015-10-16 00:16:38 +02:00
113a854048 st: Rename *material to *pipeline
... since the last commit changed the type from CoglMaterial to
CoglPipeline.
2015-10-15 23:42:19 +02:00
882f5fa79e st: Fix a bunch of cogl deprecations 2015-10-15 23:05:11 +02:00
9acdb8012c tray: Get rid of deprecation warnings
gdk_window_set_composited() is deprecated, and we don't need it as
we end up setting it to the default anyway.
We do need gtk_widget_set_double_buffered() though, which has been
deprecated as well because it is only meaningful on X11 - but so
is XEmbed, so just shut up that warning.
2015-10-15 23:05:11 +02:00
731d64e0e4 tray: Don't use gdk_display_supports_composite()
Composite is a hard requirement for mutter's compositor, so if we get
to the point of managing the tray, we already know that the extension
is supported. So let's get rid of yet another deprecation warning.
2015-10-15 23:05:11 +02:00
ccf1bd9f27 tray-manager: Don't use GdkColor
It has been deprecated for a while in favor of GdkRgba, though in our
case translating ClutterColors to an intermediate color type before
setting _NET_SYSTEM_TRAY_COLORS is a bit silly, so just move to
ClutterColor as the rest of the code base.
2015-10-15 23:05:11 +02:00
c164a8fe03 st: Use ClutterCanvas for StDrawingArea
Stop chasing down cogl deprecations by delegating all texture
handling to a ClutterCanvas.
2015-10-15 23:01:11 +02:00
1a39666f7c shell: Port to GTask 2015-10-15 22:59:49 +02:00
f2731d4d6a st: Port to GTask
GSimpleAsyncResult has been deprecated for a while.
2015-10-15 22:59:48 +02:00
3e63fb7abe Port screenshot to GTask 2015-10-15 22:59:48 +02:00
8b4249ef26 Port polkit agent to GTask 2015-10-15 22:59:48 +02:00
bf0be6ef12 hotplug-sniffer: Port to GTask
GSimpleAsyncResult is deprecated.
2015-10-15 22:59:48 +02:00
294702d3f1 shell: Use G_DECLARE_*_TYPE macros
Cut down on boilerplate by using the (no longer that) new helper
macros. We don't care about breaking ABI in private libraries, so
use G_DECLARE_FINAL_TYPE even where the class struct used to be
exposed in the header, except for types we inherit from ourselves
(obviously) or where the class exposes any vfuncs (where changes
could affect inheritance in extensions).
2015-10-15 22:58:28 +02:00
58f3b7c748 shell: Drop questionable vfuncs
Both ShellAppSystem and ShellTrayManager are used as singletons, which
significantly reduces the usefulness of inheritance - it's unlikely for
extensions to inherit from them anyway (AND use any of the vfuncs), so
drop them to allow defining the types as final in an upcoming commit.
2015-10-15 22:13:18 +02:00
e25502aeb2 shell: Use G_DEFINE_TYPE_WITH_PRIVATE() and friends 2015-10-15 22:03:06 +02:00
ffe4eaf00d st: Use G_DECLARE_*_TYPE
Cut down on boilerplate by using the (no longer that) new helper
macros. We don't care about breaking ABI in private libraries, so
use G_DECLARE_FINAL_TYPE even where the class struct used to be
exposed in the header, except for types we inherit from ourselves
(obviously) or where the class exposes any vfuncs (where changes
could affect inheritance in extensions).
2015-10-15 22:02:35 +02:00
2f88a7a1e1 st: Drop vfuncs from StThemeNodeTransition
They are unused, as we don't use them ourselves and the class is not
exposed to introspection. Drop them to allow defining the type as final
in an upcoming commit.
2015-10-15 21:43:08 +02:00
cd7d564125 st: Use G_DEFINE_TYPE_WITH_PRIVATE() and friends 2015-10-15 21:05:22 +02:00
ede81017ec hotplug-sniffer: Modernize GObject usage 2015-10-15 21:04:07 +02:00
a539e6236a calendar-server: Modernize GObject usage 2015-10-15 21:04:07 +02:00
110 changed files with 2113 additions and 3185 deletions

28
NEWS
View File

@ -1,28 +1,18 @@
3.18.3
3.19.1
======
* Fix browser plugin crash in Firefox [Carlos; #737932, #757940]
Contributors:
Carlos Garcia Campos
3.18.2
======
* Fix fullscreen animation glitches [Florian, Cosimo; #756697, #756714]
* Fix window menu being closed immediately in top orientation [Rui; #756605]
* Respect text-scaling factor under wayland [Owen; #756447]
* Fix login screen getting stuck after authentification [Ray; #754814]
* Fix overview being toggled while still animating [Rui; #756925]
* Improve robustness of browser plugin [Carlos; #737932, #757940]
* Misc. bug fixes [Owen, Florian; #756983, #757150, #757779]
* Show the Bluetooth submenu when there were setup devices [Bastien; #723848]
* Misc. bug fixes [Florian, Cosimo, Rui, Ray, Owen, Jakub, Bastien;
#756697, #756714, #756605, #754814, #738942, #756983, #756925,
#757011, #673235, #757150]
Contributors:
Cosimo Cecchi, Carlos Garcia Campos, Rui Matos, Florian Müllner, Ray Strode,
Owen W. Taylor
Cosimo Cecchi, Rui Matos, Florian Müllner, Bastien Nocera, Jakub Steiner,
Ray Strode, Owen W. Taylor
Translations:
Kjartan Maraas [nb], Khaled Hosny [ar], Sveinn í Felli [is],
Balázs Meskó [hu], Daniel Șerbănescu [ro], Aron Xu [zh_CN],
Anthony Fok [zh_TW]
Kjartan Maraas [nb], Khaled Hosny [ar], Balázs Meskó [hu],
Daniel Șerbănescu [ro], Marek Černocký [cs]
3.18.1
======

View File

@ -3,10 +3,7 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR)
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
# Browsers can unload and reload the module while browsing, which is not supported by GObject.
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined
libgnome_shell_browser_plugin_la_LIBADD = \
$(BROWSER_PLUGIN_LIBS)

View File

@ -43,6 +43,10 @@
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
typedef struct {
GDBusProxy *proxy;
} PluginData;
static NPNetscapeFuncs funcs;
static inline gchar *
@ -141,6 +145,121 @@ check_origin_and_protocol (NPP instance)
return ret;
}
/* =============== public entry points =================== */
NPError
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
{
/* global initialization routine, called once when plugin
is loaded */
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));
plugin->size = sizeof(NPPluginFuncs);
plugin->newp = NPP_New;
plugin->destroy = NPP_Destroy;
plugin->getvalue = NPP_GetValue;
plugin->setwindow = NPP_SetWindow;
return NPERR_NO_ERROR;
}
NPError
NP_Shutdown(void)
{
return NPERR_NO_ERROR;
}
const char*
NP_GetMIMEDescription(void)
{
return PLUGIN_MIME_STRING;
}
NPError
NP_GetValue(void *instance,
NPPVariable variable,
void *value)
{
switch (variable) {
case NPPVpluginNameString:
*(char**)value = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*(char**)value = PLUGIN_DESCRIPTION;
break;
default:
;
}
return NPERR_NO_ERROR;
}
NPError
NPP_New(NPMIMEType mimetype,
NPP instance,
uint16_t mode,
int16_t argc,
char **argn,
char **argv,
NPSavedData *saved)
{
/* instance initialization function */
PluginData *data;
GError *error = NULL;
g_debug ("plugin created");
if (!check_origin_and_protocol (instance))
return NPERR_GENERIC_ERROR;
data = g_slice_new (PluginData);
instance->pdata = data;
data->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL, /* interface info */
"org.gnome.Shell",
"/org/gnome/Shell",
"org.gnome.Shell.Extensions",
NULL, /* GCancellable */
&error);
if (!data->proxy)
{
/* ignore error if the shell is not running, otherwise warn */
if (error->domain != G_DBUS_ERROR ||
error->code != G_DBUS_ERROR_NAME_HAS_NO_OWNER)
{
g_warning ("Failed to set up Shell proxy: %s", error->message);
}
g_clear_error (&error);
return NPERR_GENERIC_ERROR;
}
g_debug ("plugin created successfully");
return NPERR_NO_ERROR;
}
NPError
NPP_Destroy(NPP instance,
NPSavedData **saved)
{
/* instance finalization function */
PluginData *data = instance->pdata;
g_debug ("plugin destroyed");
g_object_unref (data->proxy);
g_slice_free (PluginData, data);
return NPERR_NO_ERROR;
}
/* =================== scripting interface =================== */
typedef struct {
@ -225,18 +344,45 @@ static NPObject *
plugin_object_allocate (NPP instance,
NPClass *klass)
{
PluginObject *obj = (PluginObject *) funcs.memalloc (sizeof (PluginObject));
PluginData *data = instance->pdata;
PluginObject *obj = g_slice_new0 (PluginObject);
memset (obj, 0, sizeof (PluginObject));
obj->instance = instance;
obj->proxy = g_object_ref (data->proxy);
obj->settings = g_settings_new (SHELL_SCHEMA);
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
G_CALLBACK (on_shell_signal), obj);
return (NPObject*) obj;
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.gnome.Shell",
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_shell_appeared,
NULL,
obj,
NULL);
g_debug ("plugin object created");
return (NPObject*)obj;
}
static void
plugin_object_deallocate (NPObject *npobj)
{
funcs.memfree (npobj);
PluginObject *obj = (PluginObject*)npobj;
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
g_object_unref (obj->proxy);
if (obj->listener)
funcs.releaseobject (obj->listener);
if (obj->watch_name_id)
g_bus_unwatch_name (obj->watch_name_id);
g_debug ("plugin object destroyed");
g_slice_free (PluginObject, obj);
}
static inline gboolean
@ -887,149 +1033,6 @@ init_methods_and_properties (void)
onextension_changed_id = funcs.getstringidentifier ("onchange");
}
/* =============== public entry points =================== */
NPError
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
{
/* global initialization routine, called once when plugin
is loaded */
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));
plugin->size = sizeof(NPPluginFuncs);
plugin->newp = NPP_New;
plugin->destroy = NPP_Destroy;
plugin->getvalue = NPP_GetValue;
plugin->setwindow = NPP_SetWindow;
plugin->event = NPP_HandleEvent;
return NPERR_NO_ERROR;
}
NPError
NP_Shutdown(void)
{
return NPERR_NO_ERROR;
}
const char*
NP_GetMIMEDescription(void)
{
return PLUGIN_MIME_STRING;
}
NPError
NP_GetValue(void *instance,
NPPVariable variable,
void *value)
{
switch (variable) {
case NPPVpluginNameString:
*(char**)value = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*(char**)value = PLUGIN_DESCRIPTION;
break;
default:
;
}
return NPERR_NO_ERROR;
}
NPError
NPP_New(NPMIMEType mimetype,
NPP instance,
uint16_t mode,
int16_t argc,
char **argn,
char **argv,
NPSavedData *saved)
{
/* instance initialization function */
PluginObject *obj;
GError *error = NULL;
g_debug ("plugin created");
if (!check_origin_and_protocol (instance))
return NPERR_GENERIC_ERROR;
/* set windowless mode */
funcs.setvalue(instance, NPPVpluginWindowBool, NULL);
g_debug ("creating scriptable object");
init_methods_and_properties ();
obj = (PluginObject *) funcs.createobject (instance, &plugin_class);
instance->pdata = obj;
obj->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL, /* interface info */
"org.gnome.Shell",
"/org/gnome/Shell",
"org.gnome.Shell.Extensions",
NULL, /* GCancellable */
&error);
if (!obj->proxy)
{
/* ignore error if the shell is not running, otherwise warn */
if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER))
{
g_warning ("Failed to set up Shell proxy: %s", error->message);
}
g_clear_error (&error);
return NPERR_GENERIC_ERROR;
}
obj->settings = g_settings_new (SHELL_SCHEMA);
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
G_CALLBACK (on_shell_signal), obj);
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.gnome.Shell",
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_shell_appeared,
NULL,
obj,
NULL);
g_debug ("plugin created successfully");
return NPERR_NO_ERROR;
}
NPError
NPP_Destroy(NPP instance,
NPSavedData **saved)
{
/* instance finalization function */
PluginObject *obj = (PluginObject *) instance->pdata;
if (!obj)
return NPERR_INVALID_INSTANCE_ERROR;
g_debug ("plugin destroyed");
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
g_object_unref (obj->proxy);
if (obj->listener)
funcs.releaseobject (obj->listener);
if (obj->restart_listener)
funcs.releaseobject (obj->restart_listener);
if (obj->watch_name_id)
g_bus_unwatch_name (obj->watch_name_id);
funcs.releaseobject((NPObject *)obj);
return NPERR_NO_ERROR;
}
NPError
NPP_GetValue(NPP instance,
NPPVariable variable,
@ -1040,10 +1043,13 @@ NPP_GetValue(NPP instance,
switch (variable) {
case NPPVpluginScriptableNPObject:
g_debug ("creating scriptable object");
if (!instance->pdata)
return NPERR_INVALID_INSTANCE_ERROR;
init_methods_and_properties ();
*(NPObject**)value = instance->pdata;
*(NPObject**)value = funcs.createobject (instance, &plugin_class);
break;
case NPPVpluginNeedsXEmbed:
*(bool *)value = TRUE;
break;
default:
@ -1061,11 +1067,3 @@ NPP_SetWindow(NPP instance,
{
return NPERR_NO_ERROR;
}
int16_t
NPP_HandleEvent(NPP instance,
void *event)
{
/* Ignore the event */
return FALSE;
}

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.18.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.19.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AX_IS_RELEASE([git-directory])
AC_CONFIG_HEADERS([config.h])
@ -77,7 +77,7 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.21.5
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4
GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.18.1
MUTTER_MIN_VERSION=3.19.1
GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.45.3
LIBECAL_MIN_VERSION=3.5.3
@ -117,7 +117,7 @@ PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
PKG_CHECK_MODULES(TRAY, clutter-1.0 gtk+-3.0)
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.13.1)

View File

@ -72,6 +72,16 @@
This key sets the default state of the checkbox.
</_description>
</key>
<key name="had-bluetooth-devices-setup" type="b">
<default>false</default>
<_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary>
<_description>
The shell will only show a Bluetooth menu item if a Bluetooth
adapter is powered, or if there were devices set up associated
with the default adapter. This will be reset if the default
adapter is ever seen not to have devices associated to it.
</_description>
</key>
<child name="calendar" schema="org.gnome.shell.calendar"/>
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
<child name="keyboard" schema="org.gnome.shell.keyboard"/>

View File

@ -41,9 +41,9 @@ stage {
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.button:insensitive {
color: #7f7f7f;
color: gray;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 68, 0.7);
background-color: rgba(62, 67, 69, 0.7);
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
@ -65,9 +65,9 @@ stage {
icon-shadow: 0 1px black;
padding: 12px; }
.modal-dialog-linked-button:insensitive {
color: #7f7f7f;
color: gray;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 68, 0.7);
background-color: rgba(62, 67, 69, 0.7);
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
@ -107,8 +107,8 @@ StEntry {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
border-color: rgba(166, 166, 166, 0.5); }
StEntry:insensitive {
color: #7f7f7f;
border-color: #0d0d0d;
color: gray;
border-color: #0e0e0e;
box-shadow: none; }
StEntry StIcon.capslock-warning {
icon-size: 16px;
@ -142,7 +142,7 @@ StScrollBar {
.slider {
height: 1em;
-slider-height: 0.3em;
-slider-background-color: #0d0d0d;
-slider-background-color: #0e0e0e;
-slider-border-color: black;
-slider-active-background-color: #215d9c;
-slider-active-border-color: #184472;
@ -735,7 +735,7 @@ StScrollBar {
border-left-width: 1px; }
.calendar-nonwork-day {
color: #7f7f7f; }
color: gray; }
.calendar-today {
font-weight: bold;
@ -960,10 +960,14 @@ StScrollBar {
.search-entry {
width: 320px;
padding: 7px 9px;
border-radius: 6px; }
border-radius: 6px;
border-color: #747467;
color: #eeeeec;
background-color: #2e3436; }
.search-entry:focus {
padding: 6px 8px;
border-width: 2px; }
border-width: 2px;
border-color: #215d9c; }
.search-entry .search-entry-icon {
icon-size: 1em;
padding: 0 4px;
@ -1491,9 +1495,9 @@ StScrollBar {
text-shadow: none;
icon-shadow: none; }
.login-dialog .modal-dialog-button:default:insensitive {
color: #7f7f7f;
color: gray;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 68, 0.7);
background-color: rgba(62, 67, 69, 0.7);
box-shadow: none;
text-shadow: none;
icon-shadow: none; }

View File

@ -41,9 +41,9 @@ stage {
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.button:insensitive {
color: #939695;
color: #949796;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 71, 73, 0.7);
background-color: rgba(66, 72, 73, 0.7);
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
@ -65,9 +65,9 @@ stage {
icon-shadow: 0 1px black;
padding: 12px; }
.modal-dialog-linked-button:insensitive {
color: #939695;
color: #949796;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 71, 73, 0.7);
background-color: rgba(66, 72, 73, 0.7);
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
@ -107,8 +107,8 @@ StEntry {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
border-color: rgba(154, 154, 142, 0.5); }
StEntry:insensitive {
color: #939695;
border-color: #323636;
color: #949796;
border-color: #333636;
box-shadow: none; }
StEntry StIcon.capslock-warning {
icon-size: 16px;
@ -131,10 +131,10 @@ StScrollBar {
background-color: transparent; }
StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
border-radius: 8px;
background-color: #a5a8a6;
background-color: #a6a8a7;
margin: 3px; }
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
background-color: #c9cbc9; }
background-color: #cacbc9; }
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
background-color: #215d9c; }
@ -142,7 +142,7 @@ StScrollBar {
.slider {
height: 1em;
-slider-height: 0.3em;
-slider-background-color: #323636;
-slider-background-color: #333636;
-slider-border-color: #1c1f1f;
-slider-active-background-color: #215d9c;
-slider-active-border-color: #184472;
@ -735,7 +735,7 @@ StScrollBar {
border-left-width: 1px; }
.calendar-nonwork-day {
color: #939695; }
color: #949796; }
.calendar-today {
font-weight: bold;
@ -960,10 +960,14 @@ StScrollBar {
.search-entry {
width: 320px;
padding: 7px 9px;
border-radius: 6px; }
border-radius: 6px;
border-color: #747467;
color: #eeeeec;
background-color: #2e3436; }
.search-entry:focus {
padding: 6px 8px;
border-width: 2px; }
border-width: 2px;
border-color: #215d9c; }
.search-entry .search-entry-icon {
icon-size: 1em;
padding: 0 4px;
@ -1491,9 +1495,9 @@ StScrollBar {
text-shadow: none;
icon-shadow: none; }
.login-dialog .modal-dialog-button:default:insensitive {
color: #939695;
color: #949796;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 71, 73, 0.7);
background-color: rgba(66, 72, 73, 0.7);
box-shadow: none;
text-shadow: none;
icon-shadow: none; }

View File

@ -725,7 +725,7 @@ const Calendar = new Lang.Class({
// nRows here means 6 weeks + one header + one navbar
let nRows = 8;
while (row < 8) {
let button = new St.Button({ label: iter.getDate().toString(),
let button = new St.Button({ label: iter.toLocaleFormat(C_("date day number format", "%d")),
can_focus: true });
let rtl = button.get_text_direction() == Clutter.TextDirection.RTL;

View File

@ -78,6 +78,7 @@ let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let _a11ySettings = null;
let _themeResource = null;
function _sessionUpdated() {
if (sessionMode.isPrimary)
@ -137,9 +138,7 @@ function _initializeUI() {
Shell.WindowTracker.get_default();
Shell.AppUsage.get_default();
let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
resource._register();
reloadThemeResource();
_loadDefaultStylesheet();
// Setup the stage hierarchy early
@ -290,6 +289,14 @@ function setThemeStylesheet(cssStylesheet) {
_cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null;
}
function reloadThemeResource() {
if (_themeResource)
_themeResource._unregister();
_themeResource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
_themeResource._register();
}
/**
* loadTheme:
*

View File

@ -61,6 +61,7 @@ const RunDialog = new Lang.Class({
// rt is short for "reload theme"
'rt': Lang.bind(this, function() {
Main.reloadThemeResource();
Main.loadTheme();
})
};

View File

@ -23,6 +23,8 @@ const RfkillManagerInterface = '<node> \
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup';
const Indicator = new Lang.Class({
Name: 'BTIndicator',
Extends: PanelMenu.SystemIndicator,
@ -32,6 +34,7 @@ const Indicator = new Lang.Class({
this._indicator = this._addIndicator();
this._indicator.icon_name = 'bluetooth-active-symbolic';
this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP);
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
@ -44,13 +47,15 @@ const Indicator = new Lang.Class({
}));
this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
// The Bluetooth menu only appears when Bluetooth is in use,
// so just statically build it with a "Turn Off" menu item.
this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
this._item.icon.icon_name = 'bluetooth-active-symbolic';
this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._proxy.BluetoothAirplaneMode = true;
this._toggleItem = new PopupMenu.PopupMenuItem('');
this._toggleItem.connect('activate', Lang.bind(this, function() {
this._proxy.BluetoothAirplaneMode = !this._proxy.BluetoothAirplaneMode;
}));
this._item.menu.addMenuItem(this._toggleItem);
this._item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop');
this.menu.addMenuItem(this._item);
@ -68,42 +73,75 @@ const Indicator = new Lang.Class({
while (ret) {
let isDefault = this._model.get_value(iter,
GnomeBluetooth.Column.DEFAULT);
if (isDefault)
let isPowered = this._model.get_value(iter,
GnomeBluetooth.Column.POWERED);
if (isDefault && isPowered)
return iter;
ret = this._model.iter_next(iter);
}
return null;
},
_getNConnectedDevices: function() {
// nDevices is the number of devices setup for the current default
// adapter if one exists and is powered. If unpowered or unavailable,
// nDevice is "1" if it had setup devices associated to it the last
// time it was seen, and "-1" if not.
//
// nConnectedDevices is the number of devices connected to the default
// adapter if one exists and is powered, or -1 if it's not available.
_getNDevices: function() {
let adapter = this._getDefaultAdapter();
if (!adapter)
return 0;
return [ this._hadSetupDevices ? 1 : -1, -1 ];
let nConnectedDevices = 0;
let nDevices = 0;
let [ret, iter] = this._model.iter_children(adapter);
while (ret) {
let isConnected = this._model.get_value(iter,
GnomeBluetooth.Column.CONNECTED);
if (isConnected)
nConnectedDevices++;
let isPaired = this._model.get_value(iter,
GnomeBluetooth.Column.PAIRED);
let isTrusted = this._model.get_value(iter,
GnomeBluetooth.Column.TRUSTED);
if (isPaired || isTrusted)
nDevices++;
ret = this._model.iter_next(iter);
}
return nDevices;
if (this._hadSetupDevices != (nDevices > 0)) {
this._hadSetupDevices = !this._hadSetupDevices;
global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
}
return [ nDevices, nConnectedDevices];
},
_sync: function() {
let nDevices = this._getNConnectedDevices();
let [ nDevices, nConnectedDevices ] = this._getNDevices();
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive);
this._indicator.visible = nDevices > 0;
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
this._indicator.visible = nConnectedDevices > 0;
// Remember if there were setup devices and show the menu
// if we've seen setup devices and we're not hard blocked
if (nDevices > 0)
this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode;
else
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
if (nConnectedDevices > 0)
/* Translators: this is the number of connected bluetooth devices */
this._item.label.text = ngettext("%d Connected", "%d Connected", nDevices).format(nDevices);
this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
else if (nConnectedDevices == -1)
this._item.label.text = _("Off");
else
this._item.label.text = _("Not In Use");
this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
},
});

View File

@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-10-05 08:41+0000\n"
"PO-Revision-Date: 2015-10-04 11:42-0400\n"
"POT-Creation-Date: 2015-10-27 22:11+0000\n"
"PO-Revision-Date: 2015-10-28 10:56+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Virtaal 0.7.1\n"
"X-Generator: Gtranslator 2.91.7\n"
"X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
@ -357,7 +357,7 @@ msgstr "(např. uživatel nebo %s)"
msgid "Username: "
msgstr "Uživatelské jméno: "
#: ../js/gdm/loginDialog.js:1184
#: ../js/gdm/loginDialog.js:1180
msgid "Login Window"
msgstr "Přihlašovací okno"
@ -575,6 +575,12 @@ msgstr "Předchozí měsíc"
msgid "Next month"
msgstr "Následující měsíc"
#: ../js/ui/calendar.js:728
#, javascript-format
msgctxt "date day number format"
msgid "%d"
msgstr "%e"
#: ../js/ui/calendar.js:783
msgid "Week %V"
msgstr "Týden %V"
@ -625,7 +631,7 @@ msgstr "Externí svazek připojen"
msgid "External drive disconnected"
msgstr "Externí svazek odpojen"
#: ../js/ui/components/autorunManager.js:354
#: ../js/ui/components/autorunManager.js:351
#, javascript-format
msgid "Open with %s"
msgstr "Otevřít s %s"
@ -1023,22 +1029,22 @@ msgstr "Přehled"
msgid "Type to search…"
msgstr "Vyhledávejte psaním…"
#: ../js/ui/panel.js:352
#: ../js/ui/panel.js:358
msgid "Quit"
msgstr "Ukončit"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:404
#: ../js/ui/panel.js:414
msgid "Activities"
msgstr "Činnosti"
#: ../js/ui/panel.js:650
#: ../js/ui/panel.js:695
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Systém"
#: ../js/ui/panel.js:754
#: ../js/ui/panel.js:807
msgid "Top Bar"
msgstr "Horní lišta"
@ -1051,15 +1057,15 @@ msgstr "Horní lišta"
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:70
#: ../js/ui/runDialog.js:71
msgid "Enter a Command"
msgstr "Zadejte příkaz:"
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162
#: ../js/ui/runDialog.js:111 ../js/ui/windowMenu.js:162
msgid "Close"
msgstr "Zavřít"
#: ../js/ui/runDialog.js:281
#: ../js/ui/runDialog.js:282
msgid "Restarting…"
msgstr "Restartuje se…"
@ -1656,24 +1662,24 @@ msgstr "Použít pro přihlašovací obrazovku zadaný režim, např. „gdm“.
msgid "List possible modes"
msgstr "Vypsat možné režimy"
#: ../src/shell-app.c:239
#: ../src/shell-app.c:246
msgctxt "program"
msgid "Unknown"
msgstr "Neznámé"
#: ../src/shell-app.c:480
#: ../src/shell-app.c:487
#, c-format
msgid "Failed to launch “%s”"
msgstr "Nelze spustit „%s“"
#: ../src/shell-keyring-prompt.c:742
#: ../src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Hesla si neodpovídají."
#: ../src/shell-keyring-prompt.c:750
#: ../src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "Heslo nemůže být prázdné."
#: ../src/shell-polkit-authentication-agent.c:346
#: ../src/shell-polkit-authentication-agent.c:353
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialogové okno ověření bylo uživatelem zrušeno"

633
po/is.po

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.17.x\n"
"Project-Id-Version: gnome-shell 3.18.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-16 18:11+0200\n"
"PO-Revision-Date: 2015-10-16 18:11+0200\n"
"POT-Creation-Date: 2015-10-16 18:09+0200\n"
"PO-Revision-Date: 2015-10-16 18:09+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: Norwegian bokmål\n"
@ -1648,14 +1648,14 @@ msgstr "Ukjent"
msgid "Failed to launch “%s”"
msgstr "Klarte ikke å starte «%s»"
#: ../src/shell-keyring-prompt.c:742
#: ../src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Passordene er ikke like."
#: ../src/shell-keyring-prompt.c:750
#: ../src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "Passordet kan ikke være tomt"
#: ../src/shell-polkit-authentication-agent.c:346
#: ../src/shell-polkit-authentication-agent.c:353
msgid "Authentication dialog was dismissed by the user"
msgstr "Autentiseringsdialogen ble lukket av brukeren"

View File

@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-10-23 11:47+0000\n"
"PO-Revision-Date: 2015-10-24 19:01+0200\n"
"POT-Creation-Date: 2015-10-24 21:07+0000\n"
"PO-Revision-Date: 2015-10-25 10:17+0200\n"
"Last-Translator: Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>\n"
"Language-Team: Gnome Romanian Translation Team\n"
"Language: ro\n"
@ -50,7 +50,7 @@ msgstr "Arată meniul aplicației"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME Shell"
msgstr "Vizualizatorul activităților GNOME"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
@ -59,15 +59,15 @@ msgstr "Administrare de ferestre și lansare de aplicații"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
msgid "GNOME Shell Extension Preferences"
msgstr "Preferințele extensiei GNOME Shell"
msgstr "Preferințele extensiei Vizualizatorul activităților GNOME"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
msgid "Configure GNOME Shell Extensions"
msgstr "Configurarea extensiilor GNOME Shell"
msgstr "Configurarea extensiilor pentru Vizualizatorul activităților GNOME"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (compozitor wayland)"
msgstr "Vizualizatorul activităților GNOME (compozitor wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
@ -93,10 +93,11 @@ msgid ""
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension D-Bus methods on org.gnome.Shell."
msgstr ""
"Extensiile GNOME Shell au o proprietate uuid; această cheie listează "
"extensiile care ar trebui încărcate. Orice extensie care trebuie încărcată "
"trebuie să fie în listă. Puteți de asemenea să manipulați această listă cu "
"metodele EnableExtension și DisableExtension pe org.gnome.Shell."
"Extensiile pentru Vizualizatorul activităților GNOME au o proprietate uuid; "
"această cheie listează extensiile care ar trebui încărcate. Orice extensie "
"care trebuie încărcată trebuie să fie în listă. Puteți de asemenea să "
"manipulați această listă cu metodele EnableExtension și DisableExtension pe "
"org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Disables the validation of extension version compatibility"
@ -108,10 +109,10 @@ msgid ""
"running version. Enabling this option will disable this check and try to "
"load all extensions regardless of the versions they claim to support."
msgstr ""
"GNOME Shell va încărca doar extensiile care pretind să fie compatibile cu "
"versiunea actuală. Activarea acestei opțiuni va duce la dezactivarea "
"verificării și la încercarea de a încărca toate extensiile fără a ține cont "
"de versiunile cu care acestea pretind că sunt compatibile."
"Vizualizatorul activităților GNOME va încărca doar extensiile care pretind "
"să fie compatibile cu versiunea actuală. Activarea acestei opțiuni va duce "
"la dezactivarea verificării și la încercarea de a încărca toate extensiile "
"fără a ține cont de versiunile cu care acestea pretind că sunt compatibile."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -170,10 +171,10 @@ msgid ""
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
msgstr ""
"Shell-ul va cere o parolă când este montat un dispozitiv criptat sau un "
"sistem de fișiere la distanță. Dacă parola poate fi salvată pentru o "
"utilizare viitoare, o căsuță intitulată „Reține parola” va fi afișată. "
"Această tastă determină starea implicită a căsuței."
"Vizualizatorul activităților va cere o parolă când este montat un dispozitiv "
"criptat sau un sistem de fișiere la distanță. Dacă parola poate fi salvată "
"pentru o utilizare viitoare, o căsuță intitulată „Reține parola” va fi "
"afișată. Această tastă determină starea implicită a căsuței."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Show the week date in the calendar"
@ -200,8 +201,8 @@ msgstr ""
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Combinație de taste pentru deschiderea modului de afișare „Arată aplicațiile”"
" a prezentării generale a activităților."
"Combinație de taste pentru deschiderea modului de afișare „Arată "
"aplicațiile” a prezentării generale a activităților."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to open the overview"
@ -287,8 +288,8 @@ msgstr "Atașează dialogul modal la fereastra părinte"
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Această cheie suprascrie cheia corespondentă din org.gnome.mutter când GNOME "
"Shell rulează."
"Această cheie suprascrie cheia corespondentă din org.gnome.mutter când "
"Vizualizatorul activităților GNOME rulează."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "Enable edge tiling when dropping windows on screen edges"
@ -320,7 +321,7 @@ msgstr "S-a produs o eroare la încărcarea ferestrei cu preferințe pentru %s:"
#: ../js/extensionPrefs/main.js:154
msgid "GNOME Shell Extensions"
msgstr "Extensii GNOME Shell"
msgstr "Extensii pentru vizualizatorul activităților GNOME"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452
@ -1057,15 +1058,15 @@ msgstr "Bara de sus"
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:70
#: ../js/ui/runDialog.js:71
msgid "Enter a Command"
msgstr "Introduceți o comandă"
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162
#: ../js/ui/runDialog.js:111 ../js/ui/windowMenu.js:162
msgid "Close"
msgstr "Închide"
#: ../js/ui/runDialog.js:281
#: ../js/ui/runDialog.js:282
msgid "Restarting…"
msgstr "Se repornește…"
@ -1672,15 +1673,15 @@ msgstr "Necunoscut"
msgid "Failed to launch “%s”"
msgstr "Nu s-a putut lansa „%s”"
#: ../src/shell-keyring-prompt.c:742
#: ../src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Parolele nu se potrivesc."
#: ../src/shell-keyring-prompt.c:750
#: ../src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "Parola nu poate fi goală"
#: ../src/shell-polkit-authentication-agent.c:346
#: ../src/shell-polkit-authentication-agent.c:353
msgid "Authentication dialog was dismissed by the user"
msgstr "Fereastra de autentificare a fost închisă de către utilizator"

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,17 @@
# Chinese (Taiwan) translation for gnome-shell.
# Copyright (C) 2010 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2010, 2014.
# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2010.
# Wei-Lun Chao <chaoweilun@gmail.com>, 2010.
# Anthony Fok <foka@debian.org>, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.18\n"
"Project-Id-Version: gnome-shell 3.3.90\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-10-16 21:11+0000\n"
"PO-Revision-Date: 2015-10-17 09:30+0800\n"
"Last-Translator: Anthony Fok <foka@debian.org>\n"
"POT-Creation-Date: 2015-08-25 13:32+0800\n"
"PO-Revision-Date: 2015-08-25 13:37+0800\n"
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
@ -298,7 +297,7 @@ msgid "Cancel"
msgstr "取消"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:447
#: ../js/gdm/authPrompt.js:435
msgid "Next"
msgstr "下一個"
@ -316,29 +315,21 @@ msgstr "登入"
msgid "Choose Session"
msgstr "選擇作業階段"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:431
msgid "Not listed?"
msgstr "沒有列出來?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:850
#: ../js/gdm/loginDialog.js:847
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(例如: user 或 %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:289
msgid "Username: "
msgstr "使用者名稱:"
#: ../js/gdm/loginDialog.js:1184
#: ../js/gdm/loginDialog.js:1181
msgid "Login Window"
msgstr "登入視窗"
@ -346,11 +337,6 @@ msgstr "登入視窗"
msgid "Authentication error"
msgstr "核對錯誤"
#. We don't show fingerprint messages directly since it's
#. not the main auth service. Instead we use the messages
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:473
msgid "(or swipe finger)"
msgstr "(或是滑過手指)"
@ -359,8 +345,6 @@ msgstr "(或是滑過手指)"
msgid "Command not found"
msgstr "找不到指令"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:152
msgid "Could not parse command:"
msgstr "無法分析指令:"
@ -370,78 +354,70 @@ msgstr "無法分析指令:"
msgid "Execution of “%s” failed:"
msgstr "執行「%s」失敗"
#. Translators: Time in 24h format
#. Translators: Time in 24h format */
#: ../js/misc/util.js:191
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/misc/util.js:197
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "昨天 %H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/misc/util.js:203
#, no-c-format
msgid "%A, %H%M"
msgstr "%A %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#. i.e. "May 25, 14:30" */
#: ../js/misc/util.js:209
#, no-c-format
msgid "%B %d, %H%M"
msgstr "%m月%d日 %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#. i.e. "May 25 2012, 14:30" */
#: ../js/misc/util.js:215
#, no-c-format
msgid "%B %d %Y, %H%M"
msgstr "%Y年%m月%d日 %H:%M"
#. Translators: Time in 12h format
#. Translators: Time in 12h format */
#: ../js/misc/util.js:220
msgid "%l%M %p"
msgstr "%p %l%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/misc/util.js:226
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "昨天 %p %l%M"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/misc/util.js:232
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A%p %l%M"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#. i.e. "May 25, 2:30 pm" */
#: ../js/misc/util.js:238
#, no-c-format
msgid "%B %d, %l%M %p"
msgstr "%m月%d日%p %l%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/misc/util.js:244
#, no-c-format
msgid "%B %d %Y, %l%M %p"
msgstr "%Y年%m月%d日%p %l%M"
#. TRANSLATORS: this is the title of the wifi captive portal login
#. * window, until we know the title of the actual login page
#. * window, until we know the title of the actual login page */
#: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect"
msgstr "網頁核對重新導向"
@ -492,11 +468,12 @@ msgstr "改變背景…"
msgid "Display Settings"
msgstr "顯示設定值"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
#: ../js/ui/status/system.js:366
msgid "Settings"
msgstr "設定值"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:55
msgctxt "calendar-no-work"
msgid "06"
@ -506,43 +483,43 @@ msgstr "06"
#. *
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#.
#. */
#: ../js/ui/calendar.js:84
msgctxt "grid sunday"
msgid "S"
msgstr "日"
#. Translators: Calendar grid abbreviation for Monday
#. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:86
msgctxt "grid monday"
msgid "M"
msgstr "一"
#. Translators: Calendar grid abbreviation for Tuesday
#. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:88
msgctxt "grid tuesday"
msgid "T"
msgstr "二"
#. Translators: Calendar grid abbreviation for Wednesday
#. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:90
msgctxt "grid wednesday"
msgid "W"
msgstr "三"
#. Translators: Calendar grid abbreviation for Thursday
#. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:92
msgctxt "grid thursday"
msgid "T"
msgstr "四"
#. Translators: Calendar grid abbreviation for Friday
#. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:94
msgctxt "grid friday"
msgid "F"
msgstr "五"
#. Translators: Calendar grid abbreviation for Saturday
#. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:96
msgctxt "grid saturday"
msgid "S"
@ -562,39 +539,39 @@ msgstr "%V 週"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#.
#. */
#: ../js/ui/calendar.js:1188
msgctxt "event list time"
msgid "All Day"
msgstr "整天"
#: ../js/ui/calendar.js:1295
#: ../js/ui/calendar.js:1291
msgid "Clear section"
msgstr "清除區段"
#: ../js/ui/calendar.js:1522
#: ../js/ui/calendar.js:1518
msgid "Events"
msgstr "行程"
#: ../js/ui/calendar.js:1531
#: ../js/ui/calendar.js:1527
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%m月%d日%A"
#: ../js/ui/calendar.js:1535
#: ../js/ui/calendar.js:1531
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%Y年%m月%d日%A"
#: ../js/ui/calendar.js:1620
#: ../js/ui/calendar.js:1616
msgid "Notifications"
msgstr "通知"
#: ../js/ui/calendar.js:1771
#: ../js/ui/calendar.js:1767
msgid "No Notifications"
msgstr "沒有通知"
#: ../js/ui/calendar.js:1774
#: ../js/ui/calendar.js:1770
msgid "No Events"
msgstr "沒有行程"
@ -606,7 +583,7 @@ msgstr "外部裝置已連接"
msgid "External drive disconnected"
msgstr "外部裝置已拔除"
#: ../js/ui/components/autorunManager.js:351
#: ../js/ui/components/autorunManager.js:354
#, javascript-format
msgid "Open with %s"
msgstr "用 %s 開啟"
@ -624,7 +601,6 @@ msgstr "再輸入一次:"
msgid "Connect"
msgstr "連線"
#. Cisco LEAP
#: ../js/ui/components/networkAgent.js:233
#: ../js/ui/components/networkAgent.js:245
#: ../js/ui/components/networkAgent.js:273
@ -633,7 +609,6 @@ msgstr "連線"
msgid "Password: "
msgstr "密碼: "
#. static WEP
#: ../js/ui/components/networkAgent.js:238
msgid "Key: "
msgstr "金鑰:"
@ -723,13 +698,13 @@ msgstr "核對"
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#. * for instance. */
#: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again."
msgstr "抱歉,那樣沒有作用。請再試一次。"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#. IM name. */
#: ../js/ui/components/telepathyClient.js:759
#, javascript-format
msgid "%s is now known as %s"
@ -743,15 +718,13 @@ msgstr "視窗"
msgid "Show Applications"
msgstr "顯示應用程式"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:449
msgid "Dash"
msgstr "Dash"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#. */
#: ../js/ui/dateMenu.js:73
msgid "%B %e %Y"
msgstr "%Y年%m月%e日"
@ -759,7 +732,7 @@ msgstr "%Y年%m月%e日"
#. Translators: This is the accessible name of the date button shown
#. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015".
#.
#. */
#: ../js/ui/dateMenu.js:80
msgid "%A %B %e %Y"
msgstr "%Y年%m月%e日%A"
@ -881,13 +854,13 @@ msgstr "部分應用程式忙碌中或有未儲存的工作。"
msgid "Other users are logged in."
msgstr "其他使用者已登入。"
#. Translators: Remote here refers to a remote session, like a ssh login
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640
#, javascript-format
msgid "%s (remote)"
msgstr "%s (遠端)"
#. Translators: Console here refers to a tty like a VT console
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643
#, javascript-format
msgid "%s (console)"
@ -906,7 +879,7 @@ msgstr "是否從 extensions.gnome.org 下載並安裝「%s」"
msgid "Keyboard"
msgstr "鍵盤"
#. translators: 'Hide' is a verb
#. translators: 'Hide' is a verb */
#: ../js/ui/legacyTray.js:66
msgid "Hide tray"
msgstr "隱藏系統匣"
@ -919,7 +892,7 @@ msgstr "狀態圖示"
msgid "No extensions installed"
msgstr "沒有安裝擴充功能"
#. Translators: argument is an extension UUID.
#. Translators: argument is an extension UUID. */
#: ../js/ui/lookingGlass.js:697
#, javascript-format
msgid "%s has not emitted any errors."
@ -939,7 +912,7 @@ msgstr "已啟用"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "已停用"
@ -978,37 +951,25 @@ msgstr "概覽"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#. characters. */
#: ../js/ui/overview.js:244
msgid "Type to search…"
msgstr "輸入以搜尋…"
#: ../js/ui/panel.js:358
#: ../js/ui/panel.js:352
msgid "Quit"
msgstr "結束"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:414
#. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:404
msgid "Activities"
msgstr "概覽 "
#: ../js/ui/panel.js:693
#, fuzzy
#| msgid "System"
msgctxt "System menu in the top bar"
msgid "System"
msgstr "系統"
#: ../js/ui/panel.js:805
#: ../js/ui/panel.js:754
msgid "Top Bar"
msgstr "頂端列"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:289
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@ -1026,7 +987,7 @@ msgid "Restarting…"
msgstr "重新啟動…"
#. Translators: This is a time format for a date in
#. long format
#. long format */
#: ../js/ui/screenShield.js:85
msgid "%A, %B %d"
msgstr "%m月%d日%A"
@ -1051,13 +1012,6 @@ msgstr "鎖定"
msgid "GNOME needs to lock the screen"
msgstr "GNOME 需要鎖定螢幕"
#. We could not become modal, so we can't activate the
#. screenshield. The user is probably very upset at this
#. point, but any application using global grabs is broken
#. Just tell him to stop using this app
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
msgid "Unable to lock"
msgstr "無法鎖定"
@ -1153,7 +1107,7 @@ msgstr "關閉"
msgid "Bluetooth Settings"
msgstr "藍牙設定值"
#. Translators: this is the number of connected bluetooth devices
#. Translators: this is the number of connected bluetooth devices */
#: ../js/ui/status/bluetooth.js:105
#, javascript-format
msgid "%d Connected"
@ -1200,13 +1154,13 @@ msgstr "啟用"
msgid "<unknown>"
msgstr "<不明>"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
#, javascript-format
msgid "%s Off"
msgstr "%s 關閉"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:454
#, javascript-format
msgid "%s Connected"
@ -1214,45 +1168,45 @@ msgstr "%s 已連線"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier
#. %s is a network identifier */
#: ../js/ui/status/network.js:459
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s 未受管理"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:462
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s 正在斷線"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
#, javascript-format
msgid "%s Connecting"
msgstr "正連線到 %s"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier */
#: ../js/ui/status/network.js:472
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s 需要核對"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier
#. module, which is missing; %s is a network identifier */
#: ../js/ui/status/network.js:480
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "缺少 %s 韌體"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
#. is disabled by rfkill, or it has no coverage; %s is a network identifier */
#: ../js/ui/status/network.js:484
#, javascript-format
msgid "%s Unavailable"
msgstr "%s 無法使用"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:487
#, javascript-format
msgid "%s Connection Failed"
@ -1266,14 +1220,14 @@ msgstr "有線設定值"
msgid "Mobile Broadband Settings"
msgstr "行動寬頻設定值"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s 硬體已停用"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#. because it's disabled by rfkill (airplane mode); %s is a network identifier */
#: ../js/ui/status/network.js:592
#, javascript-format
msgid "%s Disabled"
@ -1335,13 +1289,13 @@ msgstr "Wi-Fi 設定值"
msgid "Turn On"
msgstr "開啟"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:1296
#, javascript-format
msgid "%s Hotspot Active"
msgstr "%s 熱點有效"
#. Translators: %s is a network identifier
#. Translators: %s is a network identifier */
#: ../js/ui/status/network.js:1311
#, javascript-format
msgid "%s Not Connected"
@ -1351,7 +1305,7 @@ msgstr "%s 未連線"
msgid "connecting..."
msgstr "連線中…"
#. Translators: this is for network connections that require some kind of key or password
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1414
msgid "authentication required"
msgstr "要求核對"
@ -1392,27 +1346,20 @@ msgstr "電源設定值"
msgid "Fully Charged"
msgstr "已完全充飽"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
msgid "Estimating…"
msgstr "評估中…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:86
#, javascript-format
msgid "%d%02d Remaining (%d%%)"
msgstr "剩餘時間 %d%02d (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:91
#, javascript-format
msgid "%d%02d Until Full (%d%%)"
msgstr "直到充滿還需 %d%02d (%d%%)"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
#. changing the menu contents.
#: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode On"
msgstr "飛安模式已開啟"
@ -1480,7 +1427,7 @@ msgstr "您想要保留這些顯示器設定值嗎?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#. */
#: ../js/ui/windowManager.js:82
msgid "Revert Settings"
msgstr "還原設定值"
@ -1496,7 +1443,7 @@ msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "設定值的變更會在 %d 秒內還原"
#. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height.
#. * the width of the window and the second is the height. */
#: ../js/ui/windowManager.js:658
#, javascript-format
msgid "%d x %d"
@ -1552,11 +1499,11 @@ msgstr "將工作區下移"
#: ../js/ui/windowMenu.js:136
msgid "Move to Monitor Up"
msgstr "移至螢幕上端"
msgstr "將工作區上移"
#: ../js/ui/windowMenu.js:142
msgid "Move to Monitor Down"
msgstr "移至螢幕下端"
msgstr "將工作區下移"
#: ../js/ui/windowMenu.js:148
msgid "Move to Monitor Left"
@ -1572,7 +1519,7 @@ msgstr "Evolution 行事曆"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1835
#: ../src/gvc/gvc-mixer-control.c:1837
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@ -1580,38 +1527,38 @@ msgstr[0] "%u 輸出"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1845
#: ../src/gvc/gvc-mixer-control.c:1847
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u 輸入"
#: ../src/gvc/gvc-mixer-control.c:2371
#: ../src/gvc/gvc-mixer-control.c:2373
msgid "System Sounds"
msgstr "系統音效"
#: ../src/main.c:381
#: ../src/main.c:373
msgid "Print version"
msgstr "顯示版本"
#: ../src/main.c:387
#: ../src/main.c:379
msgid "Mode used by GDM for login screen"
msgstr "GDM 在登入畫面使用的模式"
#: ../src/main.c:393
#: ../src/main.c:385
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "使用指定的模式例如「gdm」為登入畫面"
#: ../src/main.c:399
#: ../src/main.c:391
msgid "List possible modes"
msgstr "列出可能的模式"
#: ../src/shell-app.c:246
#: ../src/shell-app.c:239
msgctxt "program"
msgid "Unknown"
msgstr "不明"
#: ../src/shell-app.c:487
#: ../src/shell-app.c:480
#, c-format
msgid "Failed to launch “%s”"
msgstr "無法啟動「%s」"

View File

@ -41,8 +41,6 @@
#define N_(x) x
#endif
#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate))
typedef struct _ClientData ClientData;
typedef struct _CalendarSourceData CalendarSourceData;
@ -66,6 +64,14 @@ struct _CalendarSourceData
guint loaded : 1;
};
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
struct _CalendarSources
{
GObject parent;
CalendarSourcesPrivate *priv;
};
struct _CalendarSourcesPrivate
{
ESourceRegistry *registry;
@ -77,8 +83,8 @@ struct _CalendarSourcesPrivate
CalendarSourceData task_sources;
};
static void calendar_sources_class_init (CalendarSourcesClass *klass);
static void calendar_sources_init (CalendarSources *sources);
G_DEFINE_TYPE_WITH_PRIVATE (CalendarSources, calendar_sources, G_TYPE_OBJECT)
static void calendar_sources_finalize (GObject *object);
static void backend_died_cb (EClient *client, CalendarSourceData *source_data);
@ -108,34 +114,6 @@ client_data_free (ClientData *data)
g_slice_free (ClientData, data);
}
GType
calendar_sources_get_type (void)
{
static GType sources_type = 0;
if (!sources_type)
{
static const GTypeInfo sources_info =
{
sizeof (CalendarSourcesClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) calendar_sources_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (CalendarSources),
0, /* n_preallocs */
(GInstanceInitFunc) calendar_sources_init,
};
sources_type = g_type_register_static (G_TYPE_OBJECT,
"CalendarSources",
&sources_info, 0);
}
return sources_type;
}
static void
calendar_sources_class_init (CalendarSourcesClass *klass)
{
@ -145,14 +123,11 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
gobject_class->finalize = calendar_sources_finalize;
g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate));
signals [APPOINTMENT_SOURCES_CHANGED] =
g_signal_new ("appointment-sources-changed",
G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (CalendarSourcesClass,
appointment_sources_changed),
0,
NULL,
NULL,
NULL,
@ -163,8 +138,7 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
g_signal_new ("task-sources-changed",
G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (CalendarSourcesClass,
task_sources_changed),
0,
NULL,
NULL,
NULL,
@ -179,7 +153,7 @@ calendar_sources_init (CalendarSources *sources)
GDBusConnection *session_bus;
GVariant *result;
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
sources->priv = calendar_sources_get_instance_private (sources);
/* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
(and other library calls that eventually call g_dbus_proxy_new[_sync]())

View File

@ -28,33 +28,10 @@
G_BEGIN_DECLS
#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
#define CALENDAR_SOURCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources))
#define CALENDAR_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
#define CALENDAR_IS_SOURCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES))
#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES))
#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
G_DECLARE_FINAL_TYPE (CalendarSources, calendar_sources,
CALENDAR, SOURCES, GObject)
typedef struct _CalendarSources CalendarSources;
typedef struct _CalendarSourcesClass CalendarSourcesClass;
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
struct _CalendarSources
{
GObject parent;
CalendarSourcesPrivate *priv;
};
struct _CalendarSourcesClass
{
GObjectClass parent_class;
void (* appointment_sources_changed) (CalendarSources *sources);
void (* task_sources_changed) (CalendarSources *sources);
};
GType calendar_sources_get_type (void) G_GNUC_CONST;
CalendarSources *calendar_sources_get (void);
GList *calendar_sources_get_appointment_clients (CalendarSources *sources);
GList *calendar_sources_get_task_clients (CalendarSources *sources);

View File

@ -43,8 +43,6 @@
#define DIRECTORY_LOAD_ITEMS_PER_CALLBACK 100
#define HIGH_SCORE_RATIO 0.10
G_DEFINE_TYPE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT);
enum {
PROP_FILE = 1,
NUM_PROPERTIES
@ -72,16 +70,26 @@ typedef struct {
gint total_items;
} DeepCountState;
typedef struct _ShellMimeSnifferPrivate ShellMimeSnifferPrivate;
struct _ShellMimeSniffer
{
GObject parent_instance;
ShellMimeSnifferPrivate *priv;
};
struct _ShellMimeSnifferPrivate {
GFile *file;
GCancellable *cancellable;
guint watchdog_id;
GSimpleAsyncResult *async_result;
gchar **sniffed_mime;
GTask *task;
};
G_DEFINE_TYPE_WITH_PRIVATE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT);
static void deep_count_load (DeepCountState *state,
GFile *file);
@ -179,6 +187,7 @@ prepare_async_result (DeepCountState *state)
GArray *results;
GPtrArray *sniffed_mime;
SniffedResult result;
char **mimes;
sniffed_mime = g_ptr_array_new ();
results = g_array_new (TRUE, TRUE, sizeof (SniffedResult));
@ -220,10 +229,10 @@ prepare_async_result (DeepCountState *state)
out:
g_ptr_array_add (sniffed_mime, NULL);
self->priv->sniffed_mime = (gchar **) g_ptr_array_free (sniffed_mime, FALSE);
mimes = (gchar **) g_ptr_array_free (sniffed_mime, FALSE);
g_array_free (results, TRUE);
g_simple_async_result_complete_in_idle (self->priv->async_result);
g_task_return_pointer (self->priv->task, mimes, (GDestroyNotify)g_strfreev);
}
/* adapted from nautilus/libnautilus-private/nautilus-directory-async.c */
@ -416,20 +425,17 @@ query_info_async_ready_cb (GObject *source,
if (error != NULL)
{
g_simple_async_result_take_error (self->priv->async_result,
error);
g_simple_async_result_complete_in_idle (self->priv->async_result);
g_task_return_error (self->priv->task, error);
return;
}
if (g_file_info_get_file_type (info) != G_FILE_TYPE_DIRECTORY)
{
g_simple_async_result_set_error (self->priv->async_result,
G_IO_ERROR,
G_IO_ERROR_NOT_DIRECTORY,
"Not a directory");
g_simple_async_result_complete_in_idle (self->priv->async_result);
g_task_return_new_error (self->priv->task,
G_IO_ERROR,
G_IO_ERROR_NOT_DIRECTORY,
"Not a directory");
return;
}
@ -475,7 +481,7 @@ shell_mime_sniffer_dispose (GObject *object)
g_clear_object (&self->priv->file);
g_clear_object (&self->priv->cancellable);
g_clear_object (&self->priv->async_result);
g_clear_object (&self->priv->task);
if (self->priv->watchdog_id != 0)
{
@ -486,16 +492,6 @@ shell_mime_sniffer_dispose (GObject *object)
G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->dispose (object);
}
static void
shell_mime_sniffer_finalize (GObject *object)
{
ShellMimeSniffer *self = SHELL_MIME_SNIFFER (object);
g_strfreev (self->priv->sniffed_mime);
G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->finalize (object);
}
static void
shell_mime_sniffer_get_property (GObject *object,
guint prop_id,
@ -539,7 +535,6 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass)
oclass = G_OBJECT_CLASS (klass);
oclass->dispose = shell_mime_sniffer_dispose;
oclass->finalize = shell_mime_sniffer_finalize;
oclass->get_property = shell_mime_sniffer_get_property;
oclass->set_property = shell_mime_sniffer_set_property;
@ -550,17 +545,13 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass)
G_TYPE_FILE,
G_PARAM_READWRITE);
g_type_class_add_private (klass, sizeof (ShellMimeSnifferPrivate));
g_object_class_install_properties (oclass, NUM_PROPERTIES, properties);
}
static void
shell_mime_sniffer_init (ShellMimeSniffer *self)
{
self->priv =
G_TYPE_INSTANCE_GET_PRIVATE (self,
SHELL_TYPE_MIME_SNIFFER,
ShellMimeSnifferPrivate);
self->priv = shell_mime_sniffer_get_instance_private (self);
init_mimetypes ();
}
@ -578,14 +569,11 @@ shell_mime_sniffer_sniff_async (ShellMimeSniffer *self,
gpointer user_data)
{
g_assert (self->priv->watchdog_id == 0);
g_assert (self->priv->async_result == NULL);
g_assert (self->priv->task == NULL);
self->priv->async_result =
g_simple_async_result_new (G_OBJECT (self),
callback, user_data,
shell_mime_sniffer_sniff_finish);
self->priv->cancellable = g_cancellable_new ();
self->priv->task = g_task_new (self, self->priv->cancellable,
callback, user_data);
self->priv->watchdog_id =
g_timeout_add (WATCHDOG_TIMEOUT,
@ -600,8 +588,5 @@ shell_mime_sniffer_sniff_finish (ShellMimeSniffer *self,
GAsyncResult *res,
GError **error)
{
if (g_simple_async_result_propagate_error (self->priv->async_result, error))
return NULL;
return g_strdupv (self->priv->sniffed_mime);
return g_task_propagate_pointer (self->priv->task, error);
}

View File

@ -27,30 +27,9 @@
G_BEGIN_DECLS
#define SHELL_TYPE_MIME_SNIFFER (shell_mime_sniffer_get_type ())
#define SHELL_MIME_SNIFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_MIME_SNIFFER, ShellMimeSniffer))
#define SHELL_IS_MIME_SNIFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_MIME_SNIFFER))
#define SHELL_MIME_SNIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass))
#define SHELL_IS_MIME_SNIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_MIME_SNIFFER))
#define SHELL_MIME_SNIFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass))
typedef struct _ShellMimeSniffer ShellMimeSniffer;
typedef struct _ShellMimeSnifferPrivate ShellMimeSnifferPrivate;
typedef struct _ShellMimeSnifferClass ShellMimeSnifferClass;
struct _ShellMimeSniffer
{
GObject parent_instance;
ShellMimeSnifferPrivate *priv;
};
struct _ShellMimeSnifferClass
{
GObjectClass parent_class;
};
GType shell_mime_sniffer_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_MIME_SNIFFER (shell_mime_sniffer_get_type ())
G_DECLARE_FINAL_TYPE (ShellMimeSniffer, shell_mime_sniffer,
SHELL, MIME_SNIFFER, GObject)
ShellMimeSniffer *shell_mime_sniffer_new (GFile *file);

View File

@ -37,6 +37,15 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate;
struct _ShellAppSystem
{
GObject parent;
ShellAppSystemPrivate *priv;
};
struct _ShellAppSystemPrivate {
GHashTable *running_apps;
GHashTable *id_to_app;
@ -45,7 +54,7 @@ struct _ShellAppSystemPrivate {
static void shell_app_system_finalize (GObject *object);
G_DEFINE_TYPE(ShellAppSystem, shell_app_system, G_TYPE_OBJECT);
G_DEFINE_TYPE_WITH_PRIVATE (ShellAppSystem, shell_app_system, G_TYPE_OBJECT);
static void shell_app_system_class_init(ShellAppSystemClass *klass)
{
@ -64,11 +73,9 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass)
g_signal_new ("installed-changed",
SHELL_TYPE_APP_SYSTEM,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ShellAppSystemClass, installed_changed),
NULL, NULL, NULL,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate));
}
static void
@ -147,9 +154,7 @@ shell_app_system_init (ShellAppSystem *self)
ShellAppSystemPrivate *priv;
GAppInfoMonitor *monitor;
self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
SHELL_TYPE_APP_SYSTEM,
ShellAppSystemPrivate);
self->priv = priv = shell_app_system_get_instance_private (self);
priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL);
priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,

View File

@ -8,33 +8,10 @@
#include "shell-app.h"
#define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ())
#define SHELL_APP_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystem))
#define SHELL_APP_SYSTEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass))
#define SHELL_IS_APP_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_APP_SYSTEM))
#define SHELL_IS_APP_SYSTEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_SYSTEM))
#define SHELL_APP_SYSTEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass))
#define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ())
G_DECLARE_FINAL_TYPE (ShellAppSystem, shell_app_system,
SHELL, APP_SYSTEM, GObject)
typedef struct _ShellAppSystem ShellAppSystem;
typedef struct _ShellAppSystemClass ShellAppSystemClass;
typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate;
struct _ShellAppSystem
{
GObject parent;
ShellAppSystemPrivate *priv;
};
struct _ShellAppSystemClass
{
GObjectClass parent_class;
void (*installed_changed)(ShellAppSystem *appsys, gpointer user_data);
void (*favorites_changed)(ShellAppSystem *appsys, gpointer user_data);
};
GType shell_app_system_get_type (void) G_GNUC_CONST;
ShellAppSystem *shell_app_system_get_default (void);
ShellApp *shell_app_system_lookup_app (ShellAppSystem *system,

View File

@ -7,23 +7,9 @@
G_BEGIN_DECLS
typedef struct _ShellAppUsage ShellAppUsage;
typedef struct _ShellAppUsageClass ShellAppUsageClass;
typedef struct _ShellAppUsagePrivate ShellAppUsagePrivate;
#define SHELL_TYPE_APP_USAGE (shell_app_usage_get_type ())
#define SHELL_APP_USAGE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP_USAGE, ShellAppUsage))
#define SHELL_APP_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_USAGE, ShellAppUsageClass))
#define SHELL_IS_APP_USAGE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP_USAGE))
#define SHELL_IS_APP_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_USAGE))
#define SHELL_APP_USAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_USAGE, ShellAppUsageClass))
struct _ShellAppUsageClass
{
GObjectClass parent_class;
};
GType shell_app_usage_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (ShellAppUsage, shell_app_usage,
SHELL, APP_USAGE, GObject)
ShellAppUsage* shell_app_usage_get_default(void);

View File

@ -9,23 +9,8 @@
G_BEGIN_DECLS
typedef struct _ShellApp ShellApp;
typedef struct _ShellAppClass ShellAppClass;
typedef struct _ShellAppPrivate ShellAppPrivate;
typedef struct _ShellAppAction ShellAppAction;
#define SHELL_TYPE_APP (shell_app_get_type ())
#define SHELL_APP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP, ShellApp))
#define SHELL_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP, ShellAppClass))
#define SHELL_IS_APP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP))
#define SHELL_IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP))
#define SHELL_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP, ShellAppClass))
struct _ShellAppClass
{
GObjectClass parent_class;
};
#define SHELL_TYPE_APP (shell_app_get_type ())
G_DECLARE_FINAL_TYPE (ShellApp, shell_app, SHELL, APP, GObject)
typedef enum {
SHELL_APP_STATE_STOPPED,
@ -33,8 +18,6 @@ typedef enum {
SHELL_APP_STATE_RUNNING
} ShellAppState;
GType shell_app_get_type (void) G_GNUC_CONST;
const char *shell_app_get_id (ShellApp *app);
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);

View File

@ -23,18 +23,22 @@
* - Actor is mapped [actor and all parents visible, actor in stage]
*/
G_DEFINE_TYPE (ShellEmbeddedWindow, shell_embedded_window, GTK_TYPE_WINDOW);
enum {
PROP_0
};
typedef struct _ShellEmbeddedWindowPrivate ShellEmbeddedWindowPrivate;
struct _ShellEmbeddedWindowPrivate {
ShellGtkEmbed *actor;
GdkRectangle position;
};
G_DEFINE_TYPE_WITH_PRIVATE (ShellEmbeddedWindow,
shell_embedded_window,
GTK_TYPE_WINDOW);
/*
* The normal gtk_window_show() starts all of the complicated asynchronous
* window resizing code running; we don't want or need any of that.
@ -47,19 +51,22 @@ static void
shell_embedded_window_show (GtkWidget *widget)
{
ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
ShellEmbeddedWindowPrivate *priv;
GtkWidgetClass *widget_class;
priv = shell_embedded_window_get_instance_private (window);
/* Skip GtkWindow, but run the default GtkWidget handling which
* marks the widget visible */
widget_class = g_type_class_peek (GTK_TYPE_WIDGET);
widget_class->show (widget);
if (window->priv->actor)
if (priv->actor)
{
/* Size is 0x0 if the GtkWindow is not shown */
clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
if (clutter_actor_is_realized (CLUTTER_ACTOR (window->priv->actor)))
if (clutter_actor_is_realized (CLUTTER_ACTOR (priv->actor)))
gtk_widget_map (widget);
}
}
@ -68,9 +75,12 @@ static void
shell_embedded_window_hide (GtkWidget *widget)
{
ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
ShellEmbeddedWindowPrivate *priv;
if (window->priv->actor)
clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
priv = shell_embedded_window_get_instance_private (window);
if (priv->actor)
clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
GTK_WIDGET_CLASS (shell_embedded_window_parent_class)->hide (widget);
}
@ -90,6 +100,9 @@ static void
shell_embedded_window_check_resize (GtkContainer *container)
{
ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (container);
ShellEmbeddedWindowPrivate *priv;
priv = shell_embedded_window_get_instance_private (window);
/* Check resize is called when a resize is queued on something
* inside the GtkWindow; we need to make sure that in response
@ -97,8 +110,8 @@ shell_embedded_window_check_resize (GtkContainer *container)
* gtk_widget_size_allocate() are called; we defer to the Clutter
* logic and assume it will do the right thing.
*/
if (window->priv->actor)
clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
if (priv->actor)
clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
}
static GObject *
@ -134,8 +147,6 @@ shell_embedded_window_class_init (ShellEmbeddedWindowClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
g_type_class_add_private (klass, sizeof (ShellEmbeddedWindowPrivate));
object_class->constructor = shell_embedded_window_constructor;
widget_class->show = shell_embedded_window_show;
@ -148,8 +159,6 @@ shell_embedded_window_class_init (ShellEmbeddedWindowClass *klass)
static void
shell_embedded_window_init (ShellEmbeddedWindow *window)
{
window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, SHELL_TYPE_EMBEDDED_WINDOW,
ShellEmbeddedWindowPrivate);
}
/*
@ -161,9 +170,12 @@ _shell_embedded_window_set_actor (ShellEmbeddedWindow *window,
ShellGtkEmbed *actor)
{
ShellEmbeddedWindowPrivate *priv;
g_return_if_fail (SHELL_IS_EMBEDDED_WINDOW (window));
window->priv->actor = actor;
priv = shell_embedded_window_get_instance_private (window);
priv->actor = actor;
if (actor &&
clutter_actor_is_mapped (CLUTTER_ACTOR (actor)) &&
@ -178,20 +190,23 @@ _shell_embedded_window_allocate (ShellEmbeddedWindow *window,
int width,
int height)
{
ShellEmbeddedWindowPrivate *priv;
GtkAllocation allocation;
g_return_if_fail (SHELL_IS_EMBEDDED_WINDOW (window));
if (window->priv->position.x == x &&
window->priv->position.y == y &&
window->priv->position.width == width &&
window->priv->position.height == height)
priv = shell_embedded_window_get_instance_private (window);
if (priv->position.x == x &&
priv->position.y == y &&
priv->position.width == width &&
priv->position.height == height)
return;
window->priv->position.x = x;
window->priv->position.y = y;
window->priv->position.width = width;
window->priv->position.height = height;
priv->position.x = x;
priv->position.y = y;
priv->position.width = width;
priv->position.height = height;
if (gtk_widget_get_realized (GTK_WIDGET (window)))
gdk_window_move_resize (gtk_widget_get_window (GTK_WIDGET (window)),

View File

@ -5,31 +5,15 @@
#include <gtk/gtk.h>
#include <clutter/clutter.h>
#define SHELL_TYPE_EMBEDDED_WINDOW (shell_embedded_window_get_type ())
#define SHELL_EMBEDDED_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindow))
#define SHELL_EMBEDDED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindowClass))
#define SHELL_IS_EMBEDDED_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_EMBEDDED_WINDOW))
#define SHELL_IS_EMBEDDED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_EMBEDDED_WINDOW))
#define SHELL_EMBEDDED_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindowClass))
typedef struct _ShellEmbeddedWindow ShellEmbeddedWindow;
typedef struct _ShellEmbeddedWindowClass ShellEmbeddedWindowClass;
typedef struct _ShellEmbeddedWindowPrivate ShellEmbeddedWindowPrivate;
struct _ShellEmbeddedWindow
{
GtkWindow parent;
ShellEmbeddedWindowPrivate *priv;
};
#define SHELL_TYPE_EMBEDDED_WINDOW (shell_embedded_window_get_type ())
G_DECLARE_DERIVABLE_TYPE (ShellEmbeddedWindow, shell_embedded_window,
SHELL, EMBEDDED_WINDOW, GtkWindow)
struct _ShellEmbeddedWindowClass
{
GtkWindowClass parent_class;
};
GType shell_embedded_window_get_type (void) G_GNUC_CONST;
GtkWidget *shell_embedded_window_new (void);
#endif /* __SHELL_EMBEDDED_WINDOW_H__ */

View File

@ -23,16 +23,26 @@
static void shell_generic_container_iface_init (ClutterContainerIface *iface);
G_DEFINE_TYPE_WITH_CODE(ShellGenericContainer,
shell_generic_container,
ST_TYPE_WIDGET,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
shell_generic_container_iface_init));
typedef struct _ShellGenericContainerPrivate ShellGenericContainerPrivate;
struct _ShellGenericContainer
{
StWidget parent;
ShellGenericContainerPrivate *priv;
};
struct _ShellGenericContainerPrivate {
GHashTable *skip_paint;
};
G_DEFINE_TYPE_WITH_CODE(ShellGenericContainer,
shell_generic_container,
ST_TYPE_WIDGET,
G_ADD_PRIVATE (ShellGenericContainer)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
shell_generic_container_iface_init));
/* Signals */
enum
{
@ -385,8 +395,6 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
0,
NULL, NULL, NULL,
G_TYPE_NONE, 2, CLUTTER_TYPE_ACTOR_BOX, CLUTTER_TYPE_ALLOCATION_FLAGS);
g_type_class_add_private (gobject_class, sizeof (ShellGenericContainerPrivate));
}
static void
@ -407,8 +415,7 @@ shell_generic_container_iface_init (ClutterContainerIface *iface)
static void
shell_generic_container_init (ShellGenericContainer *area)
{
area->priv = G_TYPE_INSTANCE_GET_PRIVATE (area, SHELL_TYPE_GENERIC_CONTAINER,
ShellGenericContainerPrivate);
area->priv = shell_generic_container_get_instance_private (area);
area->priv->skip_paint = g_hash_table_new (NULL, NULL);
}

View File

@ -4,12 +4,9 @@
#include "st.h"
#define SHELL_TYPE_GENERIC_CONTAINER (shell_generic_container_get_type ())
#define SHELL_GENERIC_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainer))
#define SHELL_GENERIC_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainerClass))
#define SHELL_IS_GENERIC_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GENERIC_CONTAINER))
#define SHELL_IS_GENERIC_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GENERIC_CONTAINER))
#define SHELL_GENERIC_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainerClass))
#define SHELL_TYPE_GENERIC_CONTAINER (shell_generic_container_get_type ())
G_DECLARE_FINAL_TYPE (ShellGenericContainer, shell_generic_container,
SHELL, GENERIC_CONTAINER, StWidget)
typedef struct {
float min_size;
@ -22,25 +19,6 @@ typedef struct {
#define SHELL_TYPE_GENERIC_CONTAINER_ALLOCATION (shell_generic_container_allocation_get_type ())
GType shell_generic_container_allocation_get_type (void);
typedef struct _ShellGenericContainer ShellGenericContainer;
typedef struct _ShellGenericContainerClass ShellGenericContainerClass;
typedef struct _ShellGenericContainerPrivate ShellGenericContainerPrivate;
struct _ShellGenericContainer
{
StWidget parent;
ShellGenericContainerPrivate *priv;
};
struct _ShellGenericContainerClass
{
StWidgetClass parent_class;
};
GType shell_generic_container_get_type (void) G_GNUC_CONST;
guint shell_generic_container_get_n_skip_paint (ShellGenericContainer *self);
gboolean shell_generic_container_get_skip_paint (ShellGenericContainer *self,

View File

@ -10,22 +10,8 @@
G_BEGIN_DECLS
typedef struct _ShellGlobal ShellGlobal;
typedef struct _ShellGlobalClass ShellGlobalClass;
#define SHELL_TYPE_GLOBAL (shell_global_get_type ())
#define SHELL_GLOBAL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_GLOBAL, ShellGlobal))
#define SHELL_GLOBAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GLOBAL, ShellGlobalClass))
#define SHELL_IS_GLOBAL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_GLOBAL))
#define SHELL_IS_GLOBAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLOBAL))
#define SHELL_GLOBAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLOBAL, ShellGlobalClass))
struct _ShellGlobalClass
{
GObjectClass parent_class;
};
GType shell_global_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_GLOBAL (shell_global_get_type ())
G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject)
ShellGlobal *shell_global_get (void);

View File

@ -16,13 +16,14 @@
#include <cogl/cogl.h>
#include "shell-glsl-quad.h"
G_DEFINE_TYPE (ShellGLSLQuad, shell_glsl_quad, CLUTTER_TYPE_ACTOR);
typedef struct _ShellGLSLQuadPrivate ShellGLSLQuadPrivate;
struct _ShellGLSLQuadPrivate
{
CoglPipeline *pipeline;
};
G_DEFINE_TYPE_WITH_PRIVATE (ShellGLSLQuad, shell_glsl_quad, CLUTTER_TYPE_ACTOR);
static gboolean
shell_glsl_quad_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
@ -38,7 +39,7 @@ shell_glsl_quad_paint (ClutterActor *actor)
guint8 paint_opacity;
ClutterActorBox box;
priv = self->priv;
priv = shell_glsl_quad_get_instance_private (self);
paint_opacity = clutter_actor_get_paint_opacity (actor);
clutter_actor_get_allocation_box (actor, &box);
@ -106,7 +107,7 @@ shell_glsl_quad_dispose (GObject *gobject)
ShellGLSLQuad *self = SHELL_GLSL_QUAD (gobject);
ShellGLSLQuadPrivate *priv;
priv = self->priv;
priv = shell_glsl_quad_get_instance_private (self);
g_clear_pointer (&priv->pipeline, cogl_object_unref);
@ -116,7 +117,6 @@ shell_glsl_quad_dispose (GObject *gobject)
static void
shell_glsl_quad_init (ShellGLSLQuad *quad)
{
quad->priv = G_TYPE_INSTANCE_GET_PRIVATE (quad, SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadPrivate);
}
static void
@ -124,6 +124,7 @@ shell_glsl_quad_constructed (GObject *object)
{
ShellGLSLQuad *self;
ShellGLSLQuadClass *klass;
ShellGLSLQuadPrivate *priv;
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
@ -135,6 +136,7 @@ shell_glsl_quad_constructed (GObject *object)
*/
klass = SHELL_GLSL_QUAD_GET_CLASS (object);
self = SHELL_GLSL_QUAD (object);
priv = shell_glsl_quad_get_instance_private (self);
if (G_UNLIKELY (klass->base_pipeline == NULL))
{
@ -145,9 +147,9 @@ shell_glsl_quad_constructed (GObject *object)
klass->build_pipeline (self);
}
self->priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
cogl_pipeline_set_layer_null_texture (self->priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
cogl_pipeline_set_layer_null_texture (priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
}
static void
@ -161,8 +163,6 @@ shell_glsl_quad_class_init (ShellGLSLQuadClass *klass)
actor_class->get_paint_volume = shell_glsl_quad_get_paint_volume;
actor_class->paint = shell_glsl_quad_paint;
g_type_class_add_private (klass, sizeof (ShellGLSLQuadPrivate));
}
/**
@ -177,7 +177,8 @@ int
shell_glsl_quad_get_uniform_location (ShellGLSLQuad *quad,
const char *name)
{
return cogl_pipeline_get_uniform_location (quad->priv->pipeline, name);
ShellGLSLQuadPrivate *priv = shell_glsl_quad_get_instance_private (quad);
return cogl_pipeline_get_uniform_location (priv->pipeline, name);
}
/**
@ -195,7 +196,8 @@ shell_glsl_quad_set_uniform_float (ShellGLSLQuad *quad,
int total_count,
const float *value)
{
cogl_pipeline_set_uniform_float (quad->priv->pipeline, uniform,
ShellGLSLQuadPrivate *priv = shell_glsl_quad_get_instance_private (quad);
cogl_pipeline_set_uniform_float (priv->pipeline, uniform,
n_components, total_count / n_components,
value);
}

View File

@ -26,23 +26,9 @@ typedef enum {
SHELL_SNIPPET_HOOK_TEXTURE_LOOKUP
} ShellSnippetHook;
#define SHELL_TYPE_GLSL_QUAD (shell_glsl_quad_get_type ())
#define SHELL_GLSL_QUAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuad))
#define SHELL_GLSL_QUAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadClass))
#define SHELL_IS_GLSL_QUAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GLSL_QUAD))
#define SHELL_IS_GLSL_QUAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLSL_QUAD))
#define SHELL_GLSL_QUAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadClass))
typedef struct _ShellGLSLQuad ShellGLSLQuad;
typedef struct _ShellGLSLQuadClass ShellGLSLQuadClass;
typedef struct _ShellGLSLQuadPrivate ShellGLSLQuadPrivate;
struct _ShellGLSLQuad
{
ClutterActor parent;
ShellGLSLQuadPrivate *priv;
};
#define SHELL_TYPE_GLSL_QUAD (shell_glsl_quad_get_type ())
G_DECLARE_DERIVABLE_TYPE (ShellGLSLQuad, shell_glsl_quad,
SHELL, GLSL_QUAD, ClutterActor)
struct _ShellGLSLQuadClass
{
@ -53,8 +39,6 @@ struct _ShellGLSLQuadClass
void (*build_pipeline) (ShellGLSLQuad *effect);
};
GType shell_glsl_quad_get_type (void) G_GNUC_CONST;
void shell_glsl_quad_add_glsl_snippet (ShellGLSLQuad *quad,
ShellSnippetHook hook,
const char *declarations,

View File

@ -15,6 +15,8 @@ enum {
PROP_WINDOW
};
typedef struct _ShellGtkEmbedPrivate ShellGtkEmbedPrivate;
struct _ShellGtkEmbedPrivate
{
ShellEmbeddedWindow *window;
@ -25,7 +27,7 @@ struct _ShellGtkEmbedPrivate
guint window_created_handler;
};
G_DEFINE_TYPE (ShellGtkEmbed, shell_gtk_embed, CLUTTER_TYPE_CLONE);
G_DEFINE_TYPE_WITH_PRIVATE (ShellGtkEmbed, shell_gtk_embed, CLUTTER_TYPE_CLONE);
static void shell_gtk_embed_set_window (ShellGtkEmbed *embed,
ShellEmbeddedWindow *window);
@ -40,7 +42,7 @@ shell_gtk_embed_on_window_destroy (GtkWidget *object,
static void
shell_gtk_embed_remove_window_actor (ShellGtkEmbed *embed)
{
ShellGtkEmbedPrivate *priv = embed->priv;
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
if (priv->window_actor)
{
@ -60,7 +62,7 @@ shell_gtk_embed_window_created_cb (MetaDisplay *display,
MetaWindow *window,
ShellGtkEmbed *embed)
{
ShellGtkEmbedPrivate *priv = embed->priv;
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
Window xwindow = meta_window_get_xwindow (window);
GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (priv->window));
@ -119,11 +121,12 @@ static void
shell_gtk_embed_on_window_mapped (GtkWidget *object,
ShellGtkEmbed *embed)
{
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
MetaDisplay *display = shell_global_get_display (shell_global_get ());
/* Listen for new windows so we can detect when Mutter has
created a MutterWindow for this window */
embed->priv->window_created_handler =
priv->window_created_handler =
g_signal_connect (display,
"window-created",
G_CALLBACK (shell_gtk_embed_window_created_cb),
@ -134,44 +137,45 @@ static void
shell_gtk_embed_set_window (ShellGtkEmbed *embed,
ShellEmbeddedWindow *window)
{
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
MetaDisplay *display = shell_global_get_display (shell_global_get ());
if (embed->priv->window)
if (priv->window)
{
if (embed->priv->window_created_handler)
if (priv->window_created_handler)
{
g_signal_handler_disconnect (display,
embed->priv->window_created_handler);
embed->priv->window_created_handler = 0;
priv->window_created_handler);
priv->window_created_handler = 0;
}
shell_gtk_embed_remove_window_actor (embed);
_shell_embedded_window_set_actor (embed->priv->window, NULL);
_shell_embedded_window_set_actor (priv->window, NULL);
g_object_unref (embed->priv->window);
g_object_unref (priv->window);
g_signal_handlers_disconnect_by_func (embed->priv->window,
g_signal_handlers_disconnect_by_func (priv->window,
(gpointer)shell_gtk_embed_on_window_destroy,
embed);
g_signal_handlers_disconnect_by_func (embed->priv->window,
g_signal_handlers_disconnect_by_func (priv->window,
(gpointer)shell_gtk_embed_on_window_mapped,
embed);
}
embed->priv->window = window;
priv->window = window;
if (embed->priv->window)
if (priv->window)
{
g_object_ref (embed->priv->window);
g_object_ref (priv->window);
_shell_embedded_window_set_actor (embed->priv->window, embed);
_shell_embedded_window_set_actor (priv->window, embed);
g_signal_connect (embed->priv->window, "destroy",
g_signal_connect (priv->window, "destroy",
G_CALLBACK (shell_gtk_embed_on_window_destroy), embed);
g_signal_connect (embed->priv->window, "map",
g_signal_connect (priv->window, "map",
G_CALLBACK (shell_gtk_embed_on_window_mapped), embed);
}
@ -205,11 +209,12 @@ shell_gtk_embed_get_property (GObject *object,
GParamSpec *pspec)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (object);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
switch (prop_id)
{
case PROP_WINDOW:
g_value_set_object (value, embed->priv->window);
g_value_set_object (value, priv->window);
break;
default:
@ -225,12 +230,13 @@ shell_gtk_embed_get_preferred_width (ClutterActor *actor,
float *natural_width_p)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
if (embed->priv->window
&& gtk_widget_get_visible (GTK_WIDGET (embed->priv->window)))
if (priv->window
&& gtk_widget_get_visible (GTK_WIDGET (priv->window)))
{
GtkRequisition min_req, natural_req;
gtk_widget_get_preferred_size (GTK_WIDGET (embed->priv->window), &min_req, &natural_req);
gtk_widget_get_preferred_size (GTK_WIDGET (priv->window), &min_req, &natural_req);
*min_width_p = min_req.width;
*natural_width_p = natural_req.width;
@ -246,12 +252,13 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
float *natural_height_p)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
if (embed->priv->window
&& gtk_widget_get_visible (GTK_WIDGET (embed->priv->window)))
if (priv->window
&& gtk_widget_get_visible (GTK_WIDGET (priv->window)))
{
GtkRequisition min_req, natural_req;
gtk_widget_get_preferred_size (GTK_WIDGET (embed->priv->window), &min_req, &natural_req);
gtk_widget_get_preferred_size (GTK_WIDGET (priv->window), &min_req, &natural_req);
*min_height_p = min_req.height;
*natural_height_p = natural_req.height;
@ -266,6 +273,7 @@ shell_gtk_embed_allocate (ClutterActor *actor,
ClutterAllocationFlags flags)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
float wx = 0.0, wy = 0.0, x, y, ax, ay;
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
@ -285,7 +293,7 @@ shell_gtk_embed_allocate (ClutterActor *actor,
actor = clutter_actor_get_parent (actor);
}
_shell_embedded_window_allocate (embed->priv->window,
_shell_embedded_window_allocate (priv->window,
(int)(0.5 + wx), (int)(0.5 + wy),
box->x2 - box->x1,
box->y2 - box->y1);
@ -295,8 +303,9 @@ static void
shell_gtk_embed_map (ClutterActor *actor)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
_shell_embedded_window_map (embed->priv->window);
_shell_embedded_window_map (priv->window);
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->map (actor);
}
@ -305,8 +314,9 @@ static void
shell_gtk_embed_unmap (ClutterActor *actor)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
_shell_embedded_window_unmap (embed->priv->window);
_shell_embedded_window_unmap (priv->window);
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->unmap (actor);
}
@ -327,8 +337,6 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
g_type_class_add_private (klass, sizeof (ShellGtkEmbedPrivate));
object_class->get_property = shell_gtk_embed_get_property;
object_class->set_property = shell_gtk_embed_set_property;
object_class->dispose = shell_gtk_embed_dispose;
@ -351,8 +359,6 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
static void
shell_gtk_embed_init (ShellGtkEmbed *embed)
{
embed->priv = G_TYPE_INSTANCE_GET_PRIVATE (embed, SHELL_TYPE_GTK_EMBED,
ShellGtkEmbedPrivate);
}
/*

View File

@ -6,30 +6,15 @@
#include "shell-embedded-window.h"
#define SHELL_TYPE_GTK_EMBED (shell_gtk_embed_get_type ())
#define SHELL_GTK_EMBED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GTK_EMBED, ShellGtkEmbed))
#define SHELL_GTK_EMBED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GTK_EMBED, ShellGtkEmbedClass))
#define SHELL_IS_GTK_EMBED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GTK_EMBED))
#define SHELL_IS_GTK_EMBED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GTK_EMBED))
#define SHELL_GTK_EMBED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GTK_EMBED, ShellGtkEmbedClass))
typedef struct _ShellGtkEmbed ShellGtkEmbed;
typedef struct _ShellGtkEmbedClass ShellGtkEmbedClass;
typedef struct _ShellGtkEmbedPrivate ShellGtkEmbedPrivate;
struct _ShellGtkEmbed
{
ClutterClone parent;
ShellGtkEmbedPrivate *priv;
};
#define SHELL_TYPE_GTK_EMBED (shell_gtk_embed_get_type ())
G_DECLARE_DERIVABLE_TYPE (ShellGtkEmbed, shell_gtk_embed,
SHELL, GTK_EMBED, ClutterClone)
struct _ShellGtkEmbedClass
{
ClutterCloneClass parent_class;
};
GType shell_gtk_embed_get_type (void) G_GNUC_CONST;
ClutterActor *shell_gtk_embed_new (ShellEmbeddedWindow *window);
#endif /* __SHELL_GTK_EMBED_H__ */

View File

@ -32,7 +32,6 @@
#include <string.h>
typedef struct _ShellPasswordPromptClass ShellPasswordPromptClass;
typedef struct _ShellPasswordPromptPrivate ShellPasswordPromptPrivate;
typedef enum
@ -57,19 +56,13 @@ struct _ShellKeyringPrompt
gchar *continue_label;
gchar *cancel_label;
GcrPromptReply last_reply;
GSimpleAsyncResult *async_result;
GTask *task;
ClutterText *password_actor;
ClutterText *confirm_actor;
PromptingMode mode;
gboolean shown;
};
typedef struct _ShellKeyringPromptClass
{
GObjectClass parent_class;
} ShellKeyringPromptClass;
enum {
PROP_0,
PROP_TITLE,
@ -288,9 +281,9 @@ shell_keyring_prompt_dispose (GObject *obj)
if (self->shown)
gcr_prompt_close (GCR_PROMPT (self));
if (self->async_result)
if (self->task)
shell_keyring_prompt_cancel (self);
g_assert (self->async_result == NULL);
g_assert (self->task == NULL);
shell_keyring_prompt_set_password_actor (self, NULL);
shell_keyring_prompt_set_confirm_actor (self, NULL);
@ -420,14 +413,14 @@ shell_keyring_prompt_password_async (GcrPrompt *prompt,
ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
GObject *obj;
if (self->async_result != NULL) {
if (self->task != NULL) {
g_warning ("this prompt can only show one prompt at a time");
return;
}
self->mode = PROMPTING_FOR_PASSWORD;
self->async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
shell_keyring_prompt_password_async);
self->task = g_task_new (self, NULL, callback, user_data);
g_task_set_source_tag (self->task, shell_keyring_prompt_password_async);
obj = G_OBJECT (self);
g_object_notify (obj, "password-visible");
@ -444,18 +437,11 @@ shell_keyring_prompt_password_finish (GcrPrompt *prompt,
GAsyncResult *result,
GError **error)
{
ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (prompt),
g_return_val_if_fail (g_task_get_source_object (G_TASK (result)) == prompt, NULL);
g_return_val_if_fail (g_async_result_is_tagged (result,
shell_keyring_prompt_password_async), NULL);
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
return NULL;
if (self->last_reply == GCR_PROMPT_REPLY_CONTINUE)
return clutter_text_get_text (self->password_actor);
return NULL;
return g_task_propagate_pointer (G_TASK (result), error);
}
static void
@ -467,14 +453,14 @@ shell_keyring_prompt_confirm_async (GcrPrompt *prompt,
ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
GObject *obj;
if (self->async_result != NULL) {
if (self->task != NULL) {
g_warning ("this prompt is already prompting");
return;
}
self->mode = PROMPTING_FOR_CONFIRM;
self->async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
shell_keyring_prompt_confirm_async);
self->task = g_task_new (self, NULL, callback, user_data);
g_task_set_source_tag (self->task, shell_keyring_prompt_confirm_async);
obj = G_OBJECT (self);
g_object_notify (obj, "password-visible");
@ -491,15 +477,16 @@ shell_keyring_prompt_confirm_finish (GcrPrompt *prompt,
GAsyncResult *result,
GError **error)
{
ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
GTask *task = G_TASK (result);
gssize res;
g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (prompt),
g_return_val_if_fail (g_task_get_source_object (task) == prompt,
GCR_PROMPT_REPLY_CANCEL);
g_return_val_if_fail (g_async_result_is_tagged (result,
shell_keyring_prompt_confirm_async), GCR_PROMPT_REPLY_CANCEL);
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
return GCR_PROMPT_REPLY_CANCEL;
return self->last_reply;
res = g_task_propagate_int (task, error);
return res == -1 ? GCR_PROMPT_REPLY_CANCEL : (GcrPromptReply)res;
}
static void
@ -718,19 +705,20 @@ shell_keyring_prompt_set_confirm_actor (ShellKeyringPrompt *self,
gboolean
shell_keyring_prompt_complete (ShellKeyringPrompt *self)
{
GSimpleAsyncResult *res;
GTask *res;
PromptingMode mode;
const gchar *password;
const gchar *confirm;
const gchar *env;
g_return_val_if_fail (SHELL_IS_KEYRING_PROMPT (self), FALSE);
g_return_val_if_fail (self->mode != PROMPTING_NONE, FALSE);
g_return_val_if_fail (self->async_result != NULL, FALSE);
g_return_val_if_fail (self->task != NULL, FALSE);
password = clutter_text_get_text (self->password_actor);
if (self->mode == PROMPTING_FOR_PASSWORD)
{
password = clutter_text_get_text (self->password_actor);
/* Is it a new password? */
if (self->password_new)
{
@ -756,13 +744,15 @@ shell_keyring_prompt_complete (ShellKeyringPrompt *self)
g_object_notify (G_OBJECT (self), "password-strength");
}
self->last_reply = GCR_PROMPT_REPLY_CONTINUE;
res = self->async_result;
self->async_result = NULL;
res = self->task;
mode = self->mode;
self->task = NULL;
self->mode = PROMPTING_NONE;
g_simple_async_result_complete (res);
if (mode == PROMPTING_FOR_CONFIRM)
g_task_return_int (res, (gssize)GCR_PROMPT_REPLY_CONTINUE);
else
g_task_return_pointer (res, (gpointer)password, NULL);
g_object_unref (res);
return TRUE;
@ -777,7 +767,8 @@ shell_keyring_prompt_complete (ShellKeyringPrompt *self)
void
shell_keyring_prompt_cancel (ShellKeyringPrompt *self)
{
GSimpleAsyncResult *res;
GTask *res;
PromptingMode mode;
g_return_if_fail (SHELL_IS_KEYRING_PROMPT (self));
@ -792,13 +783,16 @@ shell_keyring_prompt_cancel (ShellKeyringPrompt *self)
return;
}
g_return_if_fail (self->async_result != NULL);
self->last_reply = GCR_PROMPT_REPLY_CANCEL;
g_return_if_fail (self->task != NULL);
res = self->async_result;
self->async_result = NULL;
res = self->task;
mode = self->mode;
self->task = NULL;
self->mode = PROMPTING_NONE;
g_simple_async_result_complete_in_idle (res);
if (mode == PROMPTING_FOR_CONFIRM)
g_task_return_int (res, (gssize) GCR_PROMPT_REPLY_CANCEL);
else
g_task_return_pointer (res, NULL, NULL);
g_object_unref (res);
}

View File

@ -32,11 +32,9 @@ G_BEGIN_DECLS
typedef struct _ShellKeyringPrompt ShellKeyringPrompt;
#define SHELL_TYPE_KEYRING_PROMPT (shell_keyring_prompt_get_type ())
#define SHELL_KEYRING_PROMPT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_KEYRING_PROMPT, ShellKeyringPrompt))
#define SHELL_IS_KEYRING_PROMPT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_KEYRING_PROMPT))
GType shell_keyring_prompt_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_KEYRING_PROMPT (shell_keyring_prompt_get_type ())
G_DECLARE_FINAL_TYPE (ShellKeyringPrompt, shell_keyring_prompt,
SHELL, KEYRING_PROMPT, GObject)
ShellKeyringPrompt * shell_keyring_prompt_new (void);

View File

@ -33,7 +33,6 @@
* the GPid array to JS).
* See https://bugzilla.gnome.org/show_bug.cgi?id=645978
*/
G_DEFINE_TYPE (ShellMountOperation, shell_mount_operation, G_TYPE_MOUNT_OPERATION);
enum {
SHOW_PROCESSES_2,
@ -42,17 +41,27 @@ enum {
static guint signals[NUM_SIGNALS] = { 0, };
typedef struct _ShellMountOperationPrivate ShellMountOperationPrivate;
struct _ShellMountOperation
{
GMountOperation parent_instance;
ShellMountOperationPrivate *priv;
};
struct _ShellMountOperationPrivate {
GArray *pids;
gchar **choices;
gchar *message;
};
G_DEFINE_TYPE_WITH_PRIVATE (ShellMountOperation, shell_mount_operation, G_TYPE_MOUNT_OPERATION);
static void
shell_mount_operation_init (ShellMountOperation *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SHELL_TYPE_MOUNT_OPERATION,
ShellMountOperationPrivate);
self->priv = shell_mount_operation_get_instance_private (self);
}
static void
@ -135,8 +144,6 @@ shell_mount_operation_class_init (ShellMountOperationClass *klass)
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_type_class_add_private (klass, sizeof (ShellMountOperationPrivate));
}
GMountOperation *

View File

@ -26,31 +26,10 @@
G_BEGIN_DECLS
#define SHELL_TYPE_MOUNT_OPERATION (shell_mount_operation_get_type ())
#define SHELL_MOUNT_OPERATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_MOUNT_OPERATION, ShellMountOperation))
#define SHELL_MOUNT_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SHELL_TYPE_MOUNT_OPERATION, ShellMountOperationClass))
#define SHELL_IS_MOUNT_OPERATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_MOUNT_OPERATION))
#define SHELL_IS_MOUNT_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_MOUNT_OPERATION))
#define SHELL_MOUNT_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_MOUNT_OPERATION, ShellMountOperationClass))
#define SHELL_TYPE_MOUNT_OPERATION (shell_mount_operation_get_type ())
G_DECLARE_FINAL_TYPE (ShellMountOperation, shell_mount_operation,
SHELL, MOUNT_OPERATION, GMountOperation)
typedef struct _ShellMountOperation ShellMountOperation;
typedef struct _ShellMountOperationClass ShellMountOperationClass;
typedef struct _ShellMountOperationPrivate ShellMountOperationPrivate;
struct _ShellMountOperation
{
GMountOperation parent_instance;
ShellMountOperationPrivate *priv;
};
struct _ShellMountOperationClass
{
GMountOperationClass parent_class;
};
GType shell_mount_operation_get_type (void);
GMountOperation *shell_mount_operation_new (void);
GArray * shell_mount_operation_get_show_processes_pids (ShellMountOperation *self);

View File

@ -60,7 +60,7 @@ struct _ShellNetworkAgentPrivate {
GHashTable *requests;
};
G_DEFINE_TYPE (ShellNetworkAgent, shell_network_agent, NM_TYPE_SECRET_AGENT)
G_DEFINE_TYPE_WITH_PRIVATE (ShellNetworkAgent, shell_network_agent, NM_TYPE_SECRET_AGENT)
static const SecretSchema network_agent_schema = {
"org.freedesktop.NetworkManager.Connection",
@ -114,8 +114,7 @@ shell_network_agent_init (ShellNetworkAgent *agent)
{
ShellNetworkAgentPrivate *priv;
priv = agent->priv = G_TYPE_INSTANCE_GET_PRIVATE (agent, SHELL_TYPE_NETWORK_AGENT, ShellNetworkAgentPrivate);
priv = agent->priv = shell_network_agent_get_instance_private (agent);
priv->requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, shell_agent_request_free);
}
@ -853,6 +852,4 @@ shell_network_agent_class_init (ShellNetworkAgentClass *klass)
G_TYPE_NONE,
1, /* n_params */
G_TYPE_STRING);
g_type_class_add_private (klass, sizeof (ShellNetworkAgentPrivate));
}

View File

@ -53,11 +53,6 @@ struct _ShellPerfLog
guint enabled : 1;
};
struct _ShellPerfLogClass
{
GObjectClass parent_class;
};
struct _ShellPerfEvent
{
guint16 id;

View File

@ -7,17 +7,8 @@
G_BEGIN_DECLS
typedef struct _ShellPerfLog ShellPerfLog;
typedef struct _ShellPerfLogClass ShellPerfLogClass;
#define SHELL_TYPE_PERF_LOG (shell_perf_log_get_type ())
#define SHELL_PERF_LOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_PERF_LOG, ShellPerfLog))
#define SHELL_PERF_LOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_PERF_LOG, ShellPerfLogClass))
#define SHELL_IS_PERF_LOG(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_PERF_LOG))
#define SHELL_IS_PERF_LOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_PERF_LOG))
#define SHELL_PERF_LOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_PERF_LOG, ShellPerfLogClass))
GType shell_perf_log_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_PERF_LOG (shell_perf_log_get_type ())
G_DECLARE_FINAL_TYPE (ShellPerfLog, shell_perf_log, SHELL, PERF_LOG, GObject)
ShellPerfLog *shell_perf_log_get_default (void);

View File

@ -201,7 +201,7 @@ struct _AuthRequest {
gchar *cookie;
GList *identities;
GSimpleAsyncResult *simple;
GTask *simple;
};
static void
@ -338,30 +338,28 @@ auth_request_complete (AuthRequest *request,
gboolean dismissed)
{
ShellPolkitAuthenticationAgent *agent = request->agent;
gboolean is_current = agent->current_request == request;
print_debug ("COMPLETING %s %s cookie %s", is_current ? "CURRENT" : "SCHEDULED",
request->action_id, request->cookie);
if (!is_current)
agent->scheduled_requests = g_list_remove (agent->scheduled_requests, request);
if (dismissed)
g_simple_async_result_set_error (request->simple,
POLKIT_ERROR,
POLKIT_ERROR_CANCELLED,
_("Authentication dialog was dismissed by the user"));
if (agent->current_request == request)
{
print_debug ("COMPLETING CURRENT %s cookie %s", request->action_id, request->cookie);
g_simple_async_result_complete_in_idle (request->simple);
auth_request_free (request);
agent->current_request = NULL;
maybe_process_next_request (agent);
}
g_task_return_new_error (request->simple,
POLKIT_ERROR,
POLKIT_ERROR_CANCELLED,
_("Authentication dialog was dismissed by the user"));
else
g_task_return_boolean (request->simple, TRUE);
auth_request_free (request);
if (is_current)
{
print_debug ("COMPLETING SCHEDULED %s cookie %s", request->action_id, request->cookie);
agent->scheduled_requests = g_list_remove (agent->scheduled_requests, request);
g_simple_async_result_complete_in_idle (request->simple);
auth_request_free (request);
agent->current_request = NULL;
maybe_process_next_request (agent);
}
}
@ -408,10 +406,7 @@ initiate_authentication (PolkitAgentListener *listener,
request->cookie = g_strdup (cookie);
request->identities = g_list_copy (identities);
g_list_foreach (request->identities, (GFunc) g_object_ref, NULL);
request->simple = g_simple_async_result_new (G_OBJECT (listener),
callback,
user_data,
initiate_authentication);
request->simple = g_task_new (listener, NULL, callback, user_data);
request->cancellable = cancellable;
request->handler_id = g_cancellable_connect (request->cancellable,
G_CALLBACK (on_request_cancelled),
@ -429,11 +424,7 @@ initiate_authentication_finish (PolkitAgentListener *listener,
GAsyncResult *res,
GError **error)
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
if (g_simple_async_result_propagate_error (simple, error))
return FALSE;
else
return TRUE;
return g_task_propagate_boolean (G_TASK (res), error);
}
void

View File

@ -33,11 +33,6 @@ typedef enum {
typedef struct _RecorderPipeline RecorderPipeline;
struct _ShellRecorderClass
{
GObjectClass parent_class;
};
struct _ShellRecorder {
GObject parent;

View File

@ -16,17 +16,8 @@ G_BEGIN_DECLS
* directory named after the date, but the encoding and output can
* be configured.
*/
typedef struct _ShellRecorder ShellRecorder;
typedef struct _ShellRecorderClass ShellRecorderClass;
#define SHELL_TYPE_RECORDER (shell_recorder_get_type ())
#define SHELL_RECORDER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_RECORDER, ShellRecorder))
#define SHELL_RECORDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_RECORDER, ShellRecorderClass))
#define SHELL_IS_RECORDER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_RECORDER))
#define SHELL_IS_RECORDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_RECORDER))
#define SHELL_RECORDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_RECORDER, ShellRecorderClass))
GType shell_recorder_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_RECORDER (shell_recorder_get_type ())
G_DECLARE_FINAL_TYPE (ShellRecorder, shell_recorder, SHELL, RECORDER, GObject)
ShellRecorder *shell_recorder_new (ClutterStage *stage);

View File

@ -14,10 +14,7 @@
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
struct _ShellScreenshotClass
{
GObjectClass parent_class;
};
typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate;
struct _ShellScreenshot
{
@ -58,16 +55,16 @@ shell_screenshot_init (ShellScreenshot *screenshot)
}
static void
on_screenshot_written (GObject *source,
on_screenshot_written (GObject *source,
GAsyncResult *result,
gpointer user_data)
gpointer user_data)
{
ShellScreenshot *screenshot = SHELL_SCREENSHOT (source);
ShellScreenshotPrivate *priv = screenshot->priv;
if (priv->callback)
priv->callback (screenshot,
g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (result)),
g_task_propagate_boolean (G_TASK (result), NULL),
&priv->screenshot_area,
priv->filename_used);
@ -168,8 +165,9 @@ prepare_write_stream (const gchar *filename,
}
static void
write_screenshot_thread (GSimpleAsyncResult *result,
GObject *object,
write_screenshot_thread (GTask *result,
gpointer object,
gpointer task_data,
GCancellable *cancellable)
{
cairo_status_t status;
@ -205,7 +203,7 @@ write_screenshot_thread (GSimpleAsyncResult *result,
}
g_simple_async_result_set_op_res_gboolean (result, status == CAIRO_STATUS_SUCCESS);
g_task_return_boolean (result, status == CAIRO_STATUS_SUCCESS);
g_clear_object (&stream);
}
@ -307,7 +305,7 @@ grab_screenshot (ClutterActor *stage,
MetaScreen *screen;
MetaCursorTracker *tracker;
int width, height;
GSimpleAsyncResult *result;
GTask *result;
GSettings *settings;
ShellScreenshotPrivate *priv = screenshot->priv;
@ -370,8 +368,8 @@ grab_screenshot (ClutterActor *stage,
g_signal_handlers_disconnect_by_func (stage, (void *)grab_screenshot, (gpointer)screenshot);
result = g_simple_async_result_new (G_OBJECT (screenshot), on_screenshot_written, NULL, grab_screenshot);
g_simple_async_result_run_in_thread (result, write_screenshot_thread, G_PRIORITY_DEFAULT, NULL);
result = g_task_new (screenshot, NULL, on_screenshot_written, NULL);
g_task_run_in_thread (result, write_screenshot_thread);
g_object_unref (result);
}
@ -379,7 +377,7 @@ static void
grab_area_screenshot (ClutterActor *stage,
ShellScreenshot *screenshot)
{
GSimpleAsyncResult *result;
GTask *result;
ShellScreenshotPrivate *priv = screenshot->priv;
do_grab_screenshot (screenshot,
@ -389,8 +387,8 @@ grab_area_screenshot (ClutterActor *stage,
priv->screenshot_area.height);
g_signal_handlers_disconnect_by_func (stage, (void *)grab_area_screenshot, (gpointer)screenshot);
result = g_simple_async_result_new (G_OBJECT (screenshot), on_screenshot_written, NULL, grab_area_screenshot);
g_simple_async_result_run_in_thread (result, write_screenshot_thread, G_PRIORITY_DEFAULT, NULL);
result = g_task_new (screenshot, NULL, on_screenshot_written, NULL);
g_task_run_in_thread (result, write_screenshot_thread);
g_object_unref (result);
}
@ -399,7 +397,7 @@ grab_window_screenshot (ClutterActor *stage,
ShellScreenshot *screenshot)
{
ShellScreenshotPrivate *priv = screenshot->priv;
GSimpleAsyncResult *result;
GTask *result;
GSettings *settings;
MetaScreen *screen = shell_global_get_screen (priv->global);
MetaCursorTracker *tracker;
@ -439,8 +437,8 @@ grab_window_screenshot (ClutterActor *stage,
g_object_unref (settings);
g_signal_handlers_disconnect_by_func (stage, (void *)grab_window_screenshot, (gpointer)screenshot);
result = g_simple_async_result_new (G_OBJECT (screenshot), on_screenshot_written, NULL, grab_window_screenshot);
g_simple_async_result_run_in_thread (result, write_screenshot_thread, G_PRIORITY_DEFAULT, NULL);
result = g_task_new (screenshot, NULL, on_screenshot_written, NULL);
g_task_run_in_thread (result, write_screenshot_thread);
g_object_unref (result);
}

View File

@ -10,19 +10,9 @@
* areas or windows and write them out as png files.
*
*/
typedef struct _ShellScreenshot ShellScreenshot;
typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate;
typedef struct _ShellScreenshotClass ShellScreenshotClass;
#define SHELL_TYPE_SCREENSHOT (shell_screenshot_get_type ())
#define SHELL_SCREENSHOT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_SCREENSHOT, ShellScreenshot))
#define SHELL_SCREENSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_SCREENSHOT, ShellScreenshotClass))
#define SHELL_IS_SCREENSHOT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_SCREENSHOT))
#define SHELL_IS_SCREENSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_SCREENSHOT))
#define SHELL_SCREENSHOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_SCREENSHOT, ShellScreenshotClass))
GType shell_screenshot_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_SCREENSHOT (shell_screenshot_get_type ())
G_DECLARE_FINAL_TYPE (ShellScreenshot, shell_screenshot,
SHELL, SCREENSHOT, GObject)
ShellScreenshot *shell_screenshot_new (void);

View File

@ -30,9 +30,6 @@
#include <string.h>
typedef struct _ShellSecureTextBuffer ShellSecureTextBuffer;
typedef struct _ShellSecureTextBufferClass ShellSecureTextBufferClass;
struct _ShellSecureTextBuffer {
ClutterTextBuffer parent;
gchar *text;
@ -41,10 +38,6 @@ struct _ShellSecureTextBuffer {
guint text_chars;
};
struct _ShellSecureTextBufferClass {
ClutterTextBufferClass parent_class;
};
/* Initial size of buffer, in bytes */
#define MIN_SIZE 16

View File

@ -28,11 +28,9 @@
G_BEGIN_DECLS
#define SHELL_TYPE_SECURE_TEXT_BUFFER (shell_secure_text_buffer_get_type ())
#define SHELL_SECURE_TEXT_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_SECURE_TEXT_BUFFER, ShellSecureTextBuffer))
#define SHELL_IS_SECURE_TEXT_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_SECURE_TEXT_BUFFER))
GType shell_secure_text_buffer_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_SECURE_TEXT_BUFFER (shell_secure_text_buffer_get_type ())
G_DECLARE_FINAL_TYPE (ShellSecureTextBuffer, shell_secure_text_buffer,
SHELL, SECURE_TEXT_BUFFER, ClutterTextBuffer)
ClutterTextBuffer * shell_secure_text_buffer_new (void);

View File

@ -16,9 +16,12 @@
#include "shell-stack.h"
G_DEFINE_TYPE (ShellStack,
shell_stack,
ST_TYPE_WIDGET);
struct _ShellStack
{
StWidget parent;
};
G_DEFINE_TYPE (ShellStack, shell_stack, ST_TYPE_WIDGET);
static void
shell_stack_allocate (ClutterActor *self,

View File

@ -5,30 +5,7 @@
#include "st.h"
#include <gtk/gtk.h>
#define SHELL_TYPE_STACK (shell_stack_get_type ())
#define SHELL_STACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_STACK, ShellStack))
#define SHELL_STACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_STACK, ShellStackClass))
#define SHELL_IS_STACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_STACK))
#define SHELL_IS_STACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_STACK))
#define SHELL_STACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_STACK, ShellStackClass))
typedef struct _ShellStack ShellStack;
typedef struct _ShellStackClass ShellStackClass;
typedef struct _ShellStackPrivate ShellStackPrivate;
struct _ShellStack
{
StWidget parent;
ShellStackPrivate *priv;
};
struct _ShellStackClass
{
StWidgetClass parent_class;
};
GType shell_stack_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_STACK (shell_stack_get_type ())
G_DECLARE_FINAL_TYPE (ShellStack, shell_stack, SHELL, STACK, StWidget)
#endif /* __SHELL_STACK_H__ */

View File

@ -6,8 +6,6 @@
#include <telepathy-glib/telepathy-glib.h>
G_DEFINE_TYPE(ShellTpClient, shell_tp_client, TP_TYPE_BASE_CLIENT)
struct _ShellTpClientPrivate
{
ShellTpClientObserveChannelsImpl observe_impl;
@ -23,6 +21,8 @@ struct _ShellTpClientPrivate
GDestroyNotify destroy_handle_channels;
};
G_DEFINE_TYPE_WITH_PRIVATE (ShellTpClient, shell_tp_client, TP_TYPE_BASE_CLIENT)
/**
* ShellTpClientObserveChannelsImpl:
* @client: a #ShellTpClient instance
@ -84,8 +84,7 @@ shell_tp_client_init (ShellTpClient *self)
{
GHashTable *filter;
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SHELL_TYPE_TP_CLIENT,
ShellTpClientPrivate);
self->priv = shell_tp_client_get_instance_private (self);
/* We only care about single-user text-based chats */
filter = tp_asv_new (
@ -198,8 +197,6 @@ shell_tp_client_class_init (ShellTpClientClass *cls)
GObjectClass *object_class = G_OBJECT_CLASS (cls);
TpBaseClientClass *base_clt_cls = TP_BASE_CLIENT_CLASS (cls);
g_type_class_add_private (cls, sizeof (ShellTpClientPrivate));
object_class->dispose = shell_tp_client_dispose;
base_clt_cls->observe_channels = observe_channels;

View File

@ -17,6 +17,15 @@ enum {
PROP_WM_CLASS
};
typedef struct _ShellTrayIconPrivate ShellTrayIconPrivate;
struct _ShellTrayIcon
{
ShellGtkEmbed parent;
ShellTrayIconPrivate *priv;
};
struct _ShellTrayIconPrivate
{
NaTrayChild *socket;
@ -25,7 +34,7 @@ struct _ShellTrayIconPrivate
char *title, *wm_class;
};
G_DEFINE_TYPE (ShellTrayIcon, shell_tray_icon, SHELL_TYPE_GTK_EMBED);
G_DEFINE_TYPE_WITH_PRIVATE (ShellTrayIcon, shell_tray_icon, SHELL_TYPE_GTK_EMBED);
static void
shell_tray_icon_finalize (GObject *object)
@ -117,8 +126,6 @@ shell_tray_icon_class_init (ShellTrayIconClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (ShellTrayIconPrivate));
object_class->get_property = shell_tray_icon_get_property;
object_class->constructed = shell_tray_icon_constructed;
object_class->finalize = shell_tray_icon_finalize;
@ -149,8 +156,7 @@ shell_tray_icon_class_init (ShellTrayIconClass *klass)
static void
shell_tray_icon_init (ShellTrayIcon *icon)
{
icon->priv = G_TYPE_INSTANCE_GET_PRIVATE (icon, SHELL_TYPE_TRAY_ICON,
ShellTrayIconPrivate);
icon->priv = shell_tray_icon_get_instance_private (icon);
}
/*

View File

@ -4,31 +4,10 @@
#include "shell-gtk-embed.h"
#define SHELL_TYPE_TRAY_ICON (shell_tray_icon_get_type ())
#define SHELL_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_TRAY_ICON, ShellTrayIcon))
#define SHELL_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_TRAY_ICON, ShellTrayIconClass))
#define SHELL_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_TRAY_ICON))
#define SHELL_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_TRAY_ICON))
#define SHELL_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_TRAY_ICON, ShellTrayIconClass))
#define SHELL_TYPE_TRAY_ICON (shell_tray_icon_get_type ())
G_DECLARE_FINAL_TYPE (ShellTrayIcon, shell_tray_icon,
SHELL, TRAY_ICON, ShellGtkEmbed)
typedef struct _ShellTrayIcon ShellTrayIcon;
typedef struct _ShellTrayIconClass ShellTrayIconClass;
typedef struct _ShellTrayIconPrivate ShellTrayIconPrivate;
struct _ShellTrayIcon
{
ShellGtkEmbed parent;
ShellTrayIconPrivate *priv;
};
struct _ShellTrayIconClass
{
ShellGtkEmbedClass parent_class;
};
GType shell_tray_icon_get_type (void) G_GNUC_CONST;
ClutterActor *shell_tray_icon_new (ShellEmbeddedWindow *window);
void shell_tray_icon_click (ShellTrayIcon *icon,

View File

@ -15,6 +15,15 @@
#include "shell-embedded-window.h"
#include "shell-global.h"
typedef struct _ShellTrayManagerPrivate ShellTrayManagerPrivate;
struct _ShellTrayManager
{
GObject parent_instance;
ShellTrayManagerPrivate *priv;
};
struct _ShellTrayManagerPrivate {
NaTrayManager *na_manager;
ClutterColor bg_color;
@ -43,7 +52,7 @@ enum
LAST_SIGNAL
};
G_DEFINE_TYPE (ShellTrayManager, shell_tray_manager, G_TYPE_OBJECT);
G_DEFINE_TYPE_WITH_PRIVATE (ShellTrayManager, shell_tray_manager, G_TYPE_OBJECT);
static guint shell_tray_manager_signals [LAST_SIGNAL] = { 0 };
@ -114,8 +123,8 @@ shell_tray_manager_get_property(GObject *object,
static void
shell_tray_manager_init (ShellTrayManager *manager)
{
manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, SHELL_TYPE_TRAY_MANAGER,
ShellTrayManagerPrivate);
manager->priv = shell_tray_manager_get_instance_private (manager);
manager->priv->na_manager = na_tray_manager_new ();
manager->priv->icons = g_hash_table_new_full (NULL, NULL,
@ -144,8 +153,6 @@ shell_tray_manager_class_init (ShellTrayManagerClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (ShellTrayManagerPrivate));
gobject_class->finalize = shell_tray_manager_finalize;
gobject_class->set_property = shell_tray_manager_set_property;
gobject_class->get_property = shell_tray_manager_get_property;
@ -154,7 +161,7 @@ shell_tray_manager_class_init (ShellTrayManagerClass *klass)
g_signal_new ("tray-icon-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ShellTrayManagerClass, tray_icon_added),
0,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
CLUTTER_TYPE_ACTOR);
@ -162,7 +169,7 @@ shell_tray_manager_class_init (ShellTrayManagerClass *klass)
g_signal_new ("tray-icon-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ShellTrayManagerClass, tray_icon_removed),
0,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
CLUTTER_TYPE_ACTOR);
@ -193,27 +200,12 @@ shell_tray_manager_style_changed (StWidget *theme_widget,
ShellTrayManager *manager = user_data;
StThemeNode *theme_node;
StIconColors *icon_colors;
GdkColor foreground, warning, error, success;
theme_node = st_widget_get_theme_node (theme_widget);
icon_colors = st_theme_node_get_icon_colors (theme_node);
foreground.red = icon_colors->foreground.red * 0x101;
foreground.green = icon_colors->foreground.green * 0x101;
foreground.blue = icon_colors->foreground.blue * 0x101;
warning.red = icon_colors->warning.red * 0x101;
warning.green = icon_colors->warning.green * 0x101;
warning.blue = icon_colors->warning.blue * 0x101;
error.red = icon_colors->error.red * 0x101;
error.green = icon_colors->error.green * 0x101;
error.blue = icon_colors->error.blue * 0x101;
success.red = icon_colors->success.red * 0x101;
success.green = icon_colors->success.green * 0x101;
success.blue = icon_colors->success.blue * 0x101;
na_tray_manager_set_colors (manager->priv->na_manager,
&foreground, &warning,
&error, &success);
&icon_colors->foreground, &icon_colors->warning,
&icon_colors->error, &icon_colors->success);
}
void
@ -287,14 +279,6 @@ na_tray_icon_added (NaTrayManager *na_manager, GtkWidget *socket,
GtkWidget *win;
ShellTrayManagerChild *child;
/* We don't need the NaTrayIcon to be composited on the window we
* put it in: the window is the same size as the tray icon
* and transparent. We can just use the default X handling of
* subwindows as mode of SOURCE (replace the parent with the
* child) and then composite the parent onto the stage.
*/
na_tray_child_set_composited (NA_TRAY_CHILD (socket), FALSE);
win = shell_embedded_window_new ();
gtk_container_add (GTK_CONTAINER (win), socket);

View File

@ -8,37 +8,9 @@
G_BEGIN_DECLS
#define SHELL_TYPE_TRAY_MANAGER (shell_tray_manager_get_type ())
#define SHELL_TRAY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_TRAY_MANAGER, ShellTrayManager))
#define SHELL_TRAY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_TRAY_MANAGER, ShellTrayManagerClass))
#define SHELL_IS_TRAY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_TRAY_MANAGER))
#define SHELL_IS_TRAY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_TRAY_MANAGER))
#define SHELL_TRAY_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_TRAY_MANAGER, ShellTrayManagerClass))
typedef struct _ShellTrayManager ShellTrayManager;
typedef struct _ShellTrayManagerPrivate ShellTrayManagerPrivate;
typedef struct _ShellTrayManagerClass ShellTrayManagerClass;
struct _ShellTrayManager
{
GObject parent_instance;
ShellTrayManagerPrivate *priv;
};
struct _ShellTrayManagerClass
{
GObjectClass parent_class;
void (* tray_icon_added) (ShellTrayManager *manager,
ClutterActor *icon,
const char *lowercase_wm_class);
void (* tray_icon_removed) (ShellTrayManager *manager,
ClutterActor *icon);
};
GType shell_tray_manager_get_type (void);
#define SHELL_TYPE_TRAY_MANAGER (shell_tray_manager_get_type ())
G_DECLARE_FINAL_TYPE (ShellTrayManager, shell_tray_manager,
SHELL, TRAY_MANAGER, GObject)
ShellTrayManager *shell_tray_manager_new (void);
void shell_tray_manager_manage_screen (ShellTrayManager *manager,

View File

@ -11,23 +11,9 @@
G_BEGIN_DECLS
typedef struct _ShellWindowTracker ShellWindowTracker;
typedef struct _ShellWindowTrackerClass ShellWindowTrackerClass;
typedef struct _ShellWindowTrackerPrivate ShellWindowTrackerPrivate;
#define SHELL_TYPE_WINDOW_TRACKER (shell_window_tracker_get_type ())
#define SHELL_WINDOW_TRACKER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_WINDOW_TRACKER, ShellWindowTracker))
#define SHELL_WINDOW_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_WINDOW_TRACKER, ShellWindowTrackerClass))
#define SHELL_IS_WINDOW_TRACKER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_WINDOW_TRACKER))
#define SHELL_IS_WINDOW_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_WINDOW_TRACKER))
#define SHELL_WINDOW_TRACKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_WINDOW_TRACKER, ShellWindowTrackerClass))
struct _ShellWindowTrackerClass
{
GObjectClass parent_class;
};
GType shell_window_tracker_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_WINDOW_TRACKER (shell_window_tracker_get_type ())
G_DECLARE_FINAL_TYPE (ShellWindowTracker, shell_window_tracker,
SHELL, WINDOW_TRACKER, GObject)
ShellWindowTracker* shell_window_tracker_get_default(void);

View File

@ -7,23 +7,8 @@
G_BEGIN_DECLS
typedef struct _ShellWM ShellWM;
typedef struct _ShellWMClass ShellWMClass;
#define SHELL_TYPE_WM (shell_wm_get_type ())
#define SHELL_WM(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_WM, ShellWM))
#define SHELL_WM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_WM, ShellWMClass))
#define SHELL_IS_WM(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_WM))
#define SHELL_IS_WM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_WM))
#define SHELL_WM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_WM, ShellWMClass))
struct _ShellWMClass
{
GObjectClass parent_class;
};
GType shell_wm_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_WM (shell_wm_get_type ())
G_DECLARE_FINAL_TYPE (ShellWM, shell_wm, SHELL, WM, GObject)
ShellWM *shell_wm_new (MetaPlugin *plugin);

View File

@ -37,9 +37,7 @@
#include "st-adjustment.h"
#include "st-private.h"
G_DEFINE_TYPE (StAdjustment, st_adjustment, G_TYPE_OBJECT)
#define ADJUSTMENT_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ST_TYPE_ADJUSTMENT, StAdjustmentPrivate))
typedef struct _StAdjustmentPrivate StAdjustmentPrivate;
struct _StAdjustmentPrivate
{
@ -55,6 +53,8 @@ struct _StAdjustmentPrivate
gdouble page_size;
};
G_DEFINE_TYPE_WITH_PRIVATE (StAdjustment, st_adjustment, G_TYPE_OBJECT)
enum
{
PROP_0,
@ -92,6 +92,7 @@ st_adjustment_constructed (GObject *object)
{
GObjectClass *g_class;
StAdjustment *self = ST_ADJUSTMENT (object);
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (self);
g_class = G_OBJECT_CLASS (st_adjustment_parent_class);
/* The docs say we're suppose to chain up, but would crash without
@ -102,8 +103,8 @@ st_adjustment_constructed (GObject *object)
g_class->constructed (object);
}
ST_ADJUSTMENT (self)->priv->is_constructing = FALSE;
st_adjustment_clamp_page (self, self->priv->lower, self->priv->upper);
priv->is_constructing = FALSE;
st_adjustment_clamp_page (self, priv->lower, priv->upper);
}
static void
@ -112,7 +113,7 @@ st_adjustment_get_property (GObject *gobject,
GValue *value,
GParamSpec *pspec)
{
StAdjustmentPrivate *priv = ST_ADJUSTMENT (gobject)->priv;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (ST_ADJUSTMENT (gobject));
switch (prop_id)
{
@ -191,8 +192,6 @@ st_adjustment_class_init (StAdjustmentClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (StAdjustmentPrivate));
object_class->constructed = st_adjustment_constructed;
object_class->get_property = st_adjustment_get_property;
object_class->set_property = st_adjustment_set_property;
@ -275,9 +274,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
static void
st_adjustment_init (StAdjustment *self)
{
self->priv = ADJUSTMENT_PRIVATE (self);
self->priv->is_constructing = TRUE;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (self);
priv->is_constructing = TRUE;
}
StAdjustment *
@ -301,13 +299,9 @@ st_adjustment_new (gdouble value,
gdouble
st_adjustment_get_value (StAdjustment *adjustment)
{
StAdjustmentPrivate *priv;
g_return_val_if_fail (ST_IS_ADJUSTMENT (adjustment), 0);
priv = adjustment->priv;
return priv->value;
return ((StAdjustmentPrivate *)st_adjustment_get_instance_private (adjustment))->value;
}
void
@ -318,7 +312,7 @@ st_adjustment_set_value (StAdjustment *adjustment,
g_return_if_fail (ST_IS_ADJUSTMENT (adjustment));
priv = adjustment->priv;
priv = st_adjustment_get_instance_private (adjustment);
/* Defer clamp until after construction. */
if (!priv->is_constructing)
@ -346,7 +340,7 @@ st_adjustment_clamp_page (StAdjustment *adjustment,
g_return_if_fail (ST_IS_ADJUSTMENT (adjustment));
priv = adjustment->priv;
priv = st_adjustment_get_instance_private (adjustment);
lower = CLAMP (lower, priv->lower, priv->upper - priv->page_size);
upper = CLAMP (upper, priv->lower + priv->page_size, priv->upper);
@ -373,7 +367,7 @@ static gboolean
st_adjustment_set_lower (StAdjustment *adjustment,
gdouble lower)
{
StAdjustmentPrivate *priv = adjustment->priv;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adjustment);
if (priv->lower != lower)
{
@ -397,7 +391,7 @@ static gboolean
st_adjustment_set_upper (StAdjustment *adjustment,
gdouble upper)
{
StAdjustmentPrivate *priv = adjustment->priv;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adjustment);
if (priv->upper != upper)
{
@ -421,7 +415,7 @@ static gboolean
st_adjustment_set_step_increment (StAdjustment *adjustment,
gdouble step)
{
StAdjustmentPrivate *priv = adjustment->priv;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adjustment);
if (priv->step_increment != step)
{
@ -441,7 +435,7 @@ static gboolean
st_adjustment_set_page_increment (StAdjustment *adjustment,
gdouble page)
{
StAdjustmentPrivate *priv = adjustment->priv;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adjustment);
if (priv->page_increment != page)
{
@ -461,7 +455,7 @@ static gboolean
st_adjustment_set_page_size (StAdjustment *adjustment,
gdouble size)
{
StAdjustmentPrivate *priv = adjustment->priv;
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adjustment);
if (priv->page_size != size)
{
@ -498,7 +492,7 @@ st_adjustment_set_values (StAdjustment *adjustment,
g_return_if_fail (step_increment >= 0 && step_increment <= G_MAXDOUBLE);
g_return_if_fail (page_increment >= 0 && page_increment <= G_MAXDOUBLE);
priv = adjustment->priv;
priv = st_adjustment_get_instance_private (adjustment);
emit_changed = FALSE;
@ -547,7 +541,7 @@ st_adjustment_get_values (StAdjustment *adjustment,
g_return_if_fail (ST_IS_ADJUSTMENT (adjustment));
priv = adjustment->priv;
priv = st_adjustment_get_instance_private (adjustment);
if (lower)
*lower = priv->lower;
@ -589,7 +583,7 @@ st_adjustment_adjust_for_scroll_event (StAdjustment *adjustment,
g_return_if_fail (ST_IS_ADJUSTMENT (adjustment));
priv = adjustment->priv;
priv = st_adjustment_get_instance_private (adjustment);
scroll_unit = pow (priv->page_size, 2.0 / 3.0);

View File

@ -30,31 +30,8 @@
G_BEGIN_DECLS
#define ST_TYPE_ADJUSTMENT (st_adjustment_get_type())
#define ST_ADJUSTMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_ADJUSTMENT, StAdjustment))
#define ST_IS_ADJUSTMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_ADJUSTMENT))
#define ST_ADJUSTMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_ADJUSTMENT, StAdjustmentClass))
#define ST_IS_ADJUSTMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_ADJUSTMENT))
#define ST_ADJUSTMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_ADJUSTMENT, StAdjustmentClass))
typedef struct _StAdjustment StAdjustment;
typedef struct _StAdjustmentPrivate StAdjustmentPrivate;
typedef struct _StAdjustmentClass StAdjustmentClass;
/**
* StAdjustment:
*
* Class for handling an interval between to values. The contents of
* the #StAdjustment are private and should be accessed using the
* public API.
*/
struct _StAdjustment
{
/*< private >*/
GObject parent_instance;
StAdjustmentPrivate *priv;
};
#define ST_TYPE_ADJUSTMENT (st_adjustment_get_type())
G_DECLARE_DERIVABLE_TYPE (StAdjustment, st_adjustment, ST, ADJUSTMENT, GObject)
/**
* StAdjustmentClass:
@ -71,8 +48,6 @@ struct _StAdjustmentClass
void (* changed) (StAdjustment *adjustment);
};
GType st_adjustment_get_type (void) G_GNUC_CONST;
StAdjustment *st_adjustment_new (gdouble value,
gdouble lower,
gdouble upper,

View File

@ -38,8 +38,7 @@
#include "st-enum-types.h"
#include "st-private.h"
#define ST_BIN_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_BIN, StBinPrivate))
typedef struct _StBinPrivate StBinPrivate;
struct _StBinPrivate
{
ClutterActor *child;
@ -65,6 +64,7 @@ enum
static void clutter_container_iface_init (ClutterContainerIface *iface);
G_DEFINE_TYPE_WITH_CODE (StBin, st_bin, ST_TYPE_WIDGET,
G_ADD_PRIVATE (StBin)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
clutter_container_iface_init));
@ -79,10 +79,11 @@ static void
st_bin_remove (ClutterContainer *container,
ClutterActor *actor)
{
StBinPrivate *priv = ST_BIN (container)->priv;
StBin *bin = ST_BIN (container);
StBinPrivate *priv = st_bin_get_instance_private (bin);
if (priv->child == actor)
st_bin_set_child (ST_BIN (container), NULL);
st_bin_set_child (bin, NULL);
}
static void
@ -97,7 +98,7 @@ st_bin_allocate (ClutterActor *self,
const ClutterActorBox *box,
ClutterAllocationFlags flags)
{
StBinPrivate *priv = ST_BIN (self)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (self));
clutter_actor_set_allocation (self, box, flags);
@ -123,7 +124,7 @@ st_bin_get_preferred_width (ClutterActor *self,
gfloat *min_width_p,
gfloat *natural_width_p)
{
StBinPrivate *priv = ST_BIN (self)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (self));
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self));
st_theme_node_adjust_for_height (theme_node, &for_height);
@ -152,7 +153,7 @@ st_bin_get_preferred_height (ClutterActor *self,
gfloat *min_height_p,
gfloat *natural_height_p)
{
StBinPrivate *priv = ST_BIN (self)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (self));
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self));
st_theme_node_adjust_for_width (theme_node, &for_width);
@ -178,7 +179,7 @@ st_bin_get_preferred_height (ClutterActor *self,
static void
st_bin_dispose (GObject *gobject)
{
StBinPrivate *priv = ST_BIN (gobject)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (gobject));
if (priv->child)
clutter_actor_destroy (priv->child);
@ -190,7 +191,7 @@ st_bin_dispose (GObject *gobject)
static void
st_bin_popup_menu (StWidget *widget)
{
StBinPrivate *priv = ST_BIN (widget)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (widget));
if (priv->child && ST_IS_WIDGET (priv->child))
st_widget_popup_menu (ST_WIDGET (priv->child));
@ -201,7 +202,7 @@ st_bin_navigate_focus (StWidget *widget,
ClutterActor *from,
GtkDirectionType direction)
{
StBinPrivate *priv = ST_BIN (widget)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (widget));
ClutterActor *bin_actor = CLUTTER_ACTOR (widget);
if (st_widget_get_can_focus (widget))
@ -232,6 +233,7 @@ st_bin_set_property (GObject *gobject,
GParamSpec *pspec)
{
StBin *bin = ST_BIN (gobject);
StBinPrivate *priv = st_bin_get_instance_private (bin);
switch (prop_id)
{
@ -242,24 +244,24 @@ st_bin_set_property (GObject *gobject,
case PROP_X_ALIGN:
st_bin_set_alignment (bin,
g_value_get_enum (value),
bin->priv->y_align);
priv->y_align);
break;
case PROP_Y_ALIGN:
st_bin_set_alignment (bin,
bin->priv->x_align,
priv->x_align,
g_value_get_enum (value));
break;
case PROP_X_FILL:
st_bin_set_fill (bin,
g_value_get_boolean (value),
bin->priv->y_fill);
priv->y_fill);
break;
case PROP_Y_FILL:
st_bin_set_fill (bin,
bin->priv->x_fill,
priv->x_fill,
g_value_get_boolean (value));
break;
@ -274,7 +276,7 @@ st_bin_get_property (GObject *gobject,
GValue *value,
GParamSpec *pspec)
{
StBinPrivate *priv = ST_BIN (gobject)->priv;
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (gobject));
switch (prop_id)
{
@ -311,8 +313,6 @@ st_bin_class_init (StBinClass *klass)
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StBinPrivate));
gobject_class->set_property = st_bin_set_property;
gobject_class->get_property = st_bin_get_property;
gobject_class->dispose = st_bin_dispose;
@ -392,10 +392,10 @@ st_bin_class_init (StBinClass *klass)
static void
st_bin_init (StBin *bin)
{
bin->priv = ST_BIN_GET_PRIVATE (bin);
StBinPrivate *priv = st_bin_get_instance_private (bin);
bin->priv->x_align = ST_ALIGN_MIDDLE;
bin->priv->y_align = ST_ALIGN_MIDDLE;
priv->x_align = ST_ALIGN_MIDDLE;
priv->y_align = ST_ALIGN_MIDDLE;
}
/**
@ -429,7 +429,7 @@ st_bin_set_child (StBin *bin,
g_return_if_fail (ST_IS_BIN (bin));
g_return_if_fail (child == NULL || CLUTTER_IS_ACTOR (child));
priv = bin->priv;
priv = st_bin_get_instance_private (bin);
if (priv->child == child)
return;
@ -463,7 +463,7 @@ st_bin_get_child (StBin *bin)
{
g_return_val_if_fail (ST_IS_BIN (bin), NULL);
return bin->priv->child;
return ((StBinPrivate *)st_bin_get_instance_private (bin))->child;
}
/**
@ -485,7 +485,7 @@ st_bin_set_alignment (StBin *bin,
g_return_if_fail (ST_IS_BIN (bin));
priv = bin->priv;
priv = st_bin_get_instance_private (bin);
g_object_freeze_notify (G_OBJECT (bin));
@ -527,7 +527,7 @@ st_bin_get_alignment (StBin *bin,
g_return_if_fail (ST_IS_BIN (bin));
priv = bin->priv;
priv = st_bin_get_instance_private (bin);
if (x_align)
*x_align = priv->x_align;
@ -555,7 +555,7 @@ st_bin_set_fill (StBin *bin,
g_return_if_fail (ST_IS_BIN (bin));
priv = bin->priv;
priv = st_bin_get_instance_private (bin);
g_object_freeze_notify (G_OBJECT (bin));
@ -594,11 +594,15 @@ st_bin_get_fill (StBin *bin,
gboolean *x_fill,
gboolean *y_fill)
{
StBinPrivate *priv;
g_return_if_fail (ST_IS_BIN (bin));
priv = st_bin_get_instance_private (bin);
if (x_fill)
*x_fill = bin->priv->x_fill;
*x_fill = priv->x_fill;
if (y_fill)
*y_fill = bin->priv->y_fill;
*y_fill = priv->y_fill;
}

View File

@ -30,28 +30,7 @@
G_BEGIN_DECLS
#define ST_TYPE_BIN (st_bin_get_type ())
#define ST_BIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_BIN, StBin))
#define ST_IS_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_BIN))
#define ST_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_BIN, StBinClass))
#define ST_IS_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_BIN))
#define ST_BIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_BIN, StBinClass))
typedef struct _StBin StBin;
typedef struct _StBinPrivate StBinPrivate;
typedef struct _StBinClass StBinClass;
/**
* StBin:
*
* The #StBin struct contains only private data
*/
struct _StBin
{
/*< private >*/
StWidget parent_instance;
StBinPrivate *priv;
};
G_DECLARE_DERIVABLE_TYPE (StBin, st_bin, ST, BIN, StWidget)
/**
* StBinClass:
@ -64,8 +43,6 @@ struct _StBinClass
StWidgetClass parent_class;
};
GType st_bin_get_type (void) G_GNUC_CONST;
StWidget * st_bin_new (void);
void st_bin_set_child (StBin *bin,
ClutterActor *child);

View File

@ -28,17 +28,9 @@ G_BEGIN_DECLS
/* A StBorderImage encapsulates an image with specified unscaled borders on each edge.
*/
typedef struct _StBorderImage StBorderImage;
typedef struct _StBorderImageClass StBorderImageClass;
#define ST_TYPE_BORDER_IMAGE (st_border_image_get_type ())
#define ST_BORDER_IMAGE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ST_TYPE_BORDER_IMAGE, StBorderImage))
#define ST_BORDER_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_BORDER_IMAGE, StBorderImageClass))
#define ST_IS_BORDER_IMAGE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), ST_TYPE_BORDER_IMAGE))
#define ST_IS_BORDER_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_BORDER_IMAGE))
#define ST_BORDER_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_BORDER_IMAGE, StBorderImageClass))
GType st_border_image_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StBorderImage, st_border_image, ST, BORDER_IMAGE, GObject)
StBorderImage *st_border_image_new (GFile *file,
int border_top,

View File

@ -30,9 +30,6 @@
G_DEFINE_TYPE (StBoxLayoutChild, st_box_layout_child, CLUTTER_TYPE_CHILD_META)
#define BOX_LAYOUT_CHILD_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), ST_TYPE_BOX_LAYOUT_CHILD, StBoxLayoutChildPrivate))
enum
{

View File

@ -27,29 +27,9 @@
G_BEGIN_DECLS
#define ST_TYPE_BOX_LAYOUT_CHILD st_box_layout_child_get_type()
#define ST_BOX_LAYOUT_CHILD(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
ST_TYPE_BOX_LAYOUT_CHILD, StBoxLayoutChild))
#define ST_BOX_LAYOUT_CHILD_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
ST_TYPE_BOX_LAYOUT_CHILD, StBoxLayoutChildClass))
#define ST_IS_BOX_LAYOUT_CHILD(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
ST_TYPE_BOX_LAYOUT_CHILD))
#define ST_IS_BOX_LAYOUT_CHILD_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
ST_TYPE_BOX_LAYOUT_CHILD))
#define ST_BOX_LAYOUT_CHILD_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
ST_TYPE_BOX_LAYOUT_CHILD, StBoxLayoutChildClass))
G_DECLARE_FINAL_TYPE (StBoxLayoutChild, st_box_layout_child, ST, BOX_LAYOUT_CHILD, ClutterChildMeta)
typedef struct _StBoxLayoutChild StBoxLayoutChild;
typedef struct _StBoxLayoutChildClass StBoxLayoutChildClass;
typedef struct _StBoxLayoutChildPrivate StBoxLayoutChildPrivate;
/**
@ -67,13 +47,6 @@ struct _StBoxLayoutChild
gboolean y_fill_set;
};
struct _StBoxLayoutChildClass
{
ClutterChildMetaClass parent_class;
};
GType st_box_layout_child_get_type (void);
G_END_DECLS
#endif /* _ST_BOX_LAYOUT_CHILD_H */

View File

@ -59,15 +59,6 @@
static void st_box_container_iface_init (ClutterContainerIface *iface);
static void st_box_scrollable_interface_init (StScrollableInterface *iface);
G_DEFINE_TYPE_WITH_CODE (StBoxLayout, st_box_layout, ST_TYPE_WIDGET,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
st_box_container_iface_init)
G_IMPLEMENT_INTERFACE (ST_TYPE_SCROLLABLE,
st_box_scrollable_interface_init));
#define BOX_LAYOUT_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), ST_TYPE_BOX_LAYOUT, StBoxLayoutPrivate))
enum {
PROP_0,
@ -84,6 +75,13 @@ struct _StBoxLayoutPrivate
StAdjustment *vadjustment;
};
G_DEFINE_TYPE_WITH_CODE (StBoxLayout, st_box_layout, ST_TYPE_WIDGET,
G_ADD_PRIVATE (StBoxLayout)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
st_box_container_iface_init)
G_IMPLEMENT_INTERFACE (ST_TYPE_SCROLLABLE,
st_box_scrollable_interface_init));
/*
* StScrollable Interface Implementation
*/
@ -588,8 +586,6 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StBoxLayoutPrivate));
object_class->get_property = st_box_layout_get_property;
object_class->set_property = st_box_layout_set_property;
object_class->dispose = st_box_layout_dispose;
@ -632,7 +628,7 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
static void
st_box_layout_init (StBoxLayout *self)
{
self->priv = BOX_LAYOUT_PRIVATE (self);
self->priv = st_box_layout_get_instance_private (self);
g_signal_connect (self, "notify::layout-manager",
G_CALLBACK (on_layout_manager_notify), NULL);

View File

@ -30,29 +30,9 @@
G_BEGIN_DECLS
#define ST_TYPE_BOX_LAYOUT st_box_layout_get_type()
#define ST_BOX_LAYOUT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
ST_TYPE_BOX_LAYOUT, StBoxLayout))
#define ST_BOX_LAYOUT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
ST_TYPE_BOX_LAYOUT, StBoxLayoutClass))
#define ST_IS_BOX_LAYOUT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
ST_TYPE_BOX_LAYOUT))
#define ST_IS_BOX_LAYOUT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
ST_TYPE_BOX_LAYOUT))
#define ST_BOX_LAYOUT_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
ST_TYPE_BOX_LAYOUT, StBoxLayoutClass))
G_DECLARE_FINAL_TYPE (StBoxLayout, st_box_layout, ST, BOX_LAYOUT, StWidget)
typedef struct _StBoxLayout StBoxLayout;
typedef struct _StBoxLayoutClass StBoxLayoutClass;
typedef struct _StBoxLayoutPrivate StBoxLayoutPrivate;
/**
@ -69,13 +49,6 @@ struct _StBoxLayout
StBoxLayoutPrivate *priv;
};
struct _StBoxLayoutClass
{
StWidgetClass parent_class;
};
GType st_box_layout_get_type (void);
StWidget *st_box_layout_new (void);
void st_box_layout_set_vertical (StBoxLayout *box,

View File

@ -64,8 +64,7 @@ enum
LAST_SIGNAL
};
#define ST_BUTTON_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_BUTTON, StButtonPrivate))
typedef struct _StButtonPrivate StButtonPrivate;
struct _StButtonPrivate
{
@ -86,7 +85,7 @@ struct _StButtonPrivate
static guint button_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE (StButton, st_button, ST_TYPE_BIN);
G_DEFINE_TYPE_WITH_PRIVATE (StButton, st_button, ST_TYPE_BIN);
static GType st_button_accessible_get_type (void) G_GNUC_CONST;
@ -108,7 +107,7 @@ static void
st_button_style_changed (StWidget *widget)
{
StButton *button = ST_BUTTON (widget);
StButtonPrivate *priv = button->priv;
StButtonPrivate *priv = st_button_get_instance_private (button);
StButtonClass *button_class = ST_BUTTON_GET_CLASS (button);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (button));
double spacing;
@ -135,12 +134,14 @@ st_button_press (StButton *button,
StButtonMask mask,
ClutterEventSequence *sequence)
{
if (button->priv->pressed == 0 || sequence)
StButtonPrivate *priv = st_button_get_instance_private (button);
if (priv->pressed == 0 || sequence)
st_widget_add_style_pseudo_class (ST_WIDGET (button), "active");
button->priv->pressed |= mask;
button->priv->press_sequence = sequence;
button->priv->device = device;
priv->pressed |= mask;
priv->press_sequence = sequence;
priv->device = device;
}
static void
@ -150,25 +151,27 @@ st_button_release (StButton *button,
int clicked_button,
ClutterEventSequence *sequence)
{
if ((device && button->priv->device != device) ||
(sequence && button->priv->press_sequence != sequence))
StButtonPrivate *priv = st_button_get_instance_private (button);
if ((device && priv->device != device) ||
(sequence && priv->press_sequence != sequence))
return;
else if (!sequence)
{
button->priv->pressed &= ~mask;
priv->pressed &= ~mask;
if (button->priv->pressed != 0)
if (priv->pressed != 0)
return;
}
button->priv->press_sequence = NULL;
button->priv->device = NULL;
priv->press_sequence = NULL;
priv->device = NULL;
st_widget_remove_style_pseudo_class (ST_WIDGET (button), "active");
if (clicked_button || sequence)
{
if (button->priv->is_toggle)
st_button_set_checked (button, !button->priv->is_checked);
if (priv->is_toggle)
st_button_set_checked (button, !priv->is_checked);
g_signal_emit (button, button_signals[CLICKED], 0, clicked_button);
}
@ -179,18 +182,19 @@ st_button_button_press (ClutterActor *actor,
ClutterButtonEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button);
ClutterInputDevice *device = clutter_event_get_device ((ClutterEvent*) event);
if (button->priv->press_sequence)
if (priv->press_sequence)
return CLUTTER_EVENT_PROPAGATE;
if (button->priv->button_mask & mask)
if (priv->button_mask & mask)
{
if (button->priv->grabbed == 0)
if (priv->grabbed == 0)
clutter_grab_pointer (actor);
button->priv->grabbed |= mask;
priv->grabbed |= mask;
st_button_press (button, device, mask, NULL);
return TRUE;
@ -204,18 +208,19 @@ st_button_button_release (ClutterActor *actor,
ClutterButtonEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (event->button);
ClutterInputDevice *device = clutter_event_get_device ((ClutterEvent*) event);
if (button->priv->button_mask & mask)
if (priv->button_mask & mask)
{
gboolean is_click;
is_click = button->priv->grabbed && clutter_actor_contains (actor, event->source);
is_click = priv->grabbed && clutter_actor_contains (actor, event->source);
st_button_release (button, device, mask, is_click ? event->button : 0, NULL);
button->priv->grabbed &= ~mask;
if (button->priv->grabbed == 0)
priv->grabbed &= ~mask;
if (priv->grabbed == 0)
clutter_ungrab_pointer ();
return TRUE;
@ -229,25 +234,26 @@ st_button_touch_event (ClutterActor *actor,
ClutterTouchEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
StButtonMask mask = ST_BUTTON_MASK_FROM_BUTTON (1);
ClutterEventSequence *sequence;
ClutterInputDevice *device;
if (button->priv->pressed != 0)
if (priv->pressed != 0)
return CLUTTER_EVENT_PROPAGATE;
device = clutter_event_get_device ((ClutterEvent*) event);
sequence = clutter_event_get_event_sequence ((ClutterEvent*) event);
if (event->type == CLUTTER_TOUCH_BEGIN && !button->priv->press_sequence)
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
{
clutter_input_device_sequence_grab (device, sequence, actor);
st_button_press (button, device, 0, sequence);
return CLUTTER_EVENT_STOP;
}
else if (event->type == CLUTTER_TOUCH_END &&
button->priv->device == device &&
button->priv->press_sequence == sequence)
priv->device == device &&
priv->press_sequence == sequence)
{
st_button_release (button, device, mask, 0, sequence);
clutter_input_device_sequence_ungrab (device, sequence);
@ -262,8 +268,9 @@ st_button_key_press (ClutterActor *actor,
ClutterKeyEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
if (button->priv->button_mask & ST_BUTTON_ONE)
if (priv->button_mask & ST_BUTTON_ONE)
{
if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return ||
@ -283,8 +290,9 @@ st_button_key_release (ClutterActor *actor,
ClutterKeyEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
if (button->priv->button_mask & ST_BUTTON_ONE)
if (priv->button_mask & ST_BUTTON_ONE)
{
if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return ||
@ -293,7 +301,7 @@ st_button_key_release (ClutterActor *actor,
{
gboolean is_click;
is_click = (button->priv->pressed & ST_BUTTON_ONE);
is_click = (priv->pressed & ST_BUTTON_ONE);
st_button_release (button, NULL, ST_BUTTON_ONE, is_click ? 1 : 0, NULL);
return TRUE;
}
@ -306,10 +314,11 @@ static void
st_button_key_focus_out (ClutterActor *actor)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
/* If we lose focus between a key press and release, undo the press */
if ((button->priv->pressed & ST_BUTTON_ONE) &&
!(button->priv->grabbed & ST_BUTTON_ONE))
if ((priv->pressed & ST_BUTTON_ONE) &&
!(priv->grabbed & ST_BUTTON_ONE))
st_button_release (button, NULL, ST_BUTTON_ONE, 0, NULL);
CLUTTER_ACTOR_CLASS (st_button_parent_class)->key_focus_out (actor);
@ -320,18 +329,19 @@ st_button_enter (ClutterActor *actor,
ClutterCrossingEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
gboolean ret;
ret = CLUTTER_ACTOR_CLASS (st_button_parent_class)->enter_event (actor, event);
if (button->priv->grabbed)
if (priv->grabbed)
{
if (st_widget_get_hover (ST_WIDGET (button)))
st_button_press (button, button->priv->device,
button->priv->grabbed, NULL);
st_button_press (button, priv->device,
priv->grabbed, NULL);
else
st_button_release (button, button->priv->device,
button->priv->grabbed, 0, NULL);
st_button_release (button, priv->device,
priv->grabbed, 0, NULL);
}
return ret;
@ -342,18 +352,19 @@ st_button_leave (ClutterActor *actor,
ClutterCrossingEvent *event)
{
StButton *button = ST_BUTTON (actor);
StButtonPrivate *priv = st_button_get_instance_private (button);
gboolean ret;
ret = CLUTTER_ACTOR_CLASS (st_button_parent_class)->leave_event (actor, event);
if (button->priv->grabbed)
if (priv->grabbed)
{
if (st_widget_get_hover (ST_WIDGET (button)))
st_button_press (button, button->priv->device,
button->priv->grabbed, NULL);
st_button_press (button, priv->device,
priv->grabbed, NULL);
else
st_button_release (button, button->priv->device,
button->priv->grabbed, 0, NULL);
st_button_release (button, priv->device,
priv->grabbed, 0, NULL);
}
return ret;
@ -395,7 +406,7 @@ st_button_get_property (GObject *gobject,
GValue *value,
GParamSpec *pspec)
{
StButtonPrivate *priv = ST_BUTTON (gobject)->priv;
StButtonPrivate *priv = st_button_get_instance_private (ST_BUTTON (gobject));
switch (prop_id)
{
@ -425,7 +436,7 @@ st_button_get_property (GObject *gobject,
static void
st_button_finalize (GObject *gobject)
{
StButtonPrivate *priv = ST_BUTTON (gobject)->priv;
StButtonPrivate *priv = st_button_get_instance_private (ST_BUTTON (gobject));
g_free (priv->text);
@ -440,8 +451,6 @@ st_button_class_init (StButtonClass *klass)
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StButtonPrivate));
gobject_class->set_property = st_button_set_property;
gobject_class->get_property = st_button_get_property;
gobject_class->finalize = st_button_finalize;
@ -512,9 +521,10 @@ st_button_class_init (StButtonClass *klass)
static void
st_button_init (StButton *button)
{
button->priv = ST_BUTTON_GET_PRIVATE (button);
button->priv->spacing = 6;
button->priv->button_mask = ST_BUTTON_ONE;
StButtonPrivate *priv = st_button_get_instance_private (button);
priv->spacing = 6;
priv->button_mask = ST_BUTTON_ONE;
clutter_actor_set_reactive (CLUTTER_ACTOR (button), TRUE);
st_widget_set_track_hover (ST_WIDGET (button), TRUE);
@ -560,7 +570,7 @@ st_button_get_label (StButton *button)
{
g_return_val_if_fail (ST_IS_BUTTON (button), NULL);
return button->priv->text;
return ((StButtonPrivate *)st_button_get_instance_private (button))->text;
}
/**
@ -579,7 +589,7 @@ st_button_set_label (StButton *button,
g_return_if_fail (ST_IS_BUTTON (button));
priv = button->priv;
priv = st_button_get_instance_private (button);
g_free (priv->text);
@ -626,7 +636,7 @@ st_button_get_button_mask (StButton *button)
{
g_return_val_if_fail (ST_IS_BUTTON (button), 0);
return button->priv->button_mask;
return ((StButtonPrivate *)st_button_get_instance_private (button))->button_mask;
}
/**
@ -640,9 +650,12 @@ void
st_button_set_button_mask (StButton *button,
StButtonMask mask)
{
StButtonPrivate *priv;
g_return_if_fail (ST_IS_BUTTON (button));
button->priv->button_mask = mask;
priv = st_button_get_instance_private (button);
priv->button_mask = mask;
g_object_notify (G_OBJECT (button), "button-mask");
}
@ -660,7 +673,7 @@ st_button_get_toggle_mode (StButton *button)
{
g_return_val_if_fail (ST_IS_BUTTON (button), FALSE);
return button->priv->is_toggle;
return ((StButtonPrivate *)st_button_get_instance_private (button))->is_toggle;
}
/**
@ -675,9 +688,12 @@ void
st_button_set_toggle_mode (StButton *button,
gboolean toggle)
{
StButtonPrivate *priv;
g_return_if_fail (ST_IS_BUTTON (button));
button->priv->is_toggle = toggle;
priv = st_button_get_instance_private (button);
priv->is_toggle = toggle;
g_object_notify (G_OBJECT (button), "toggle-mode");
}
@ -695,7 +711,7 @@ st_button_get_checked (StButton *button)
{
g_return_val_if_fail (ST_IS_BUTTON (button), FALSE);
return button->priv->is_checked;
return ((StButtonPrivate *)st_button_get_instance_private (button))->is_checked;
}
/**
@ -710,11 +726,14 @@ void
st_button_set_checked (StButton *button,
gboolean checked)
{
StButtonPrivate *priv;
g_return_if_fail (ST_IS_BUTTON (button));
if (button->priv->is_checked != checked)
priv = st_button_get_instance_private (button);
if (priv->is_checked != checked)
{
button->priv->is_checked = checked;
priv->is_checked = checked;
if (checked)
st_widget_add_style_pseudo_class (ST_WIDGET (button), "checked");
@ -741,25 +760,30 @@ st_button_set_checked (StButton *button,
void
st_button_fake_release (StButton *button)
{
if (button->priv->pressed)
st_button_release (button, button->priv->device,
button->priv->pressed, 0, NULL);
StButtonPrivate *priv;
if (button->priv->grabbed)
g_return_if_fail (ST_IS_BUTTON (button));
priv = st_button_get_instance_private (button);
if (priv->pressed)
st_button_release (button, priv->device,
priv->pressed, 0, NULL);
if (priv->grabbed)
{
button->priv->grabbed = 0;
priv->grabbed = 0;
clutter_ungrab_pointer ();
}
if (button->priv->device &&
button->priv->press_sequence)
if (priv->device &&
priv->press_sequence)
{
clutter_input_device_sequence_ungrab (button->priv->device,
button->priv->press_sequence);
button->priv->press_sequence = NULL;
clutter_input_device_sequence_ungrab (priv->device,
priv->press_sequence);
priv->press_sequence = NULL;
}
button->priv->device = NULL;
priv->device = NULL;
}
/******************************************************************************/
@ -822,7 +846,7 @@ st_button_accessible_get_name (AtkObject *obj)
if (name != NULL)
return name;
return button->priv->text;
return st_button_get_label (button);
}
static void
@ -852,7 +876,7 @@ static void
st_button_accessible_compute_role (AtkObject *accessible,
StButton *button)
{
atk_object_set_role (accessible, button->priv->is_toggle
atk_object_set_role (accessible, st_button_get_toggle_mode (button)
? ATK_ROLE_TOGGLE_BUTTON : ATK_ROLE_PUSH_BUTTON);
}

View File

@ -29,31 +29,8 @@ G_BEGIN_DECLS
#include <st/st-bin.h>
#define ST_TYPE_BUTTON (st_button_get_type ())
#define ST_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_BUTTON, StButton))
#define ST_IS_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_BUTTON))
#define ST_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_BUTTON, StButtonClass))
#define ST_IS_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_BUTTON))
#define ST_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_BUTTON, StButtonClass))
typedef struct _StButton StButton;
typedef struct _StButtonPrivate StButtonPrivate;
typedef struct _StButtonClass StButtonClass;
/**
* StButton:
*
* The contents of this structure is private and should only be accessed using
* the provided API.
*/
struct _StButton
{
/*< private >*/
StBin parent_instance;
StButtonPrivate *priv;
};
#define ST_TYPE_BUTTON (st_button_get_type ())
G_DECLARE_DERIVABLE_TYPE (StButton, st_button, ST, BUTTON, StBin)
struct _StButtonClass
{
@ -66,8 +43,6 @@ struct _StButtonClass
void (* clicked) (StButton *button);
};
GType st_button_get_type (void) G_GNUC_CONST;
StWidget *st_button_new (void);
StWidget *st_button_new_with_label (const gchar *text);
const gchar *st_button_get_label (StButton *button);

View File

@ -34,11 +34,6 @@
#include <gdk/gdkx.h>
#include <string.h>
G_DEFINE_TYPE (StClipboard, st_clipboard, G_TYPE_OBJECT)
#define CLIPBOARD_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), ST_TYPE_CLIPBOARD, StClipboardPrivate))
struct _StClipboardPrivate
{
Window clipboard_window;
@ -48,6 +43,8 @@ struct _StClipboardPrivate
gint n_targets;
};
G_DEFINE_TYPE_WITH_PRIVATE (StClipboard, st_clipboard, G_TYPE_OBJECT)
typedef struct _EventFilterData EventFilterData;
struct _EventFilterData
{
@ -182,8 +179,6 @@ st_clipboard_class_init (StClipboardClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (StClipboardPrivate));
object_class->get_property = st_clipboard_get_property;
object_class->set_property = st_clipboard_set_property;
object_class->dispose = st_clipboard_dispose;
@ -197,7 +192,7 @@ st_clipboard_init (StClipboard *self)
Display *dpy;
StClipboardPrivate *priv;
priv = self->priv = CLIPBOARD_PRIVATE (self);
priv = self->priv = st_clipboard_get_instance_private (self);
gdk_display = gdk_display_get_default ();
dpy = GDK_DISPLAY_XDISPLAY (gdk_display);

View File

@ -29,29 +29,9 @@
G_BEGIN_DECLS
#define ST_TYPE_CLIPBOARD st_clipboard_get_type()
#define ST_CLIPBOARD(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
ST_TYPE_CLIPBOARD, StClipboard))
#define ST_CLIPBOARD_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
ST_TYPE_CLIPBOARD, StClipboardClass))
#define ST_IS_CLIPBOARD(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
ST_TYPE_CLIPBOARD))
#define ST_IS_CLIPBOARD_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
ST_TYPE_CLIPBOARD))
#define ST_CLIPBOARD_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
ST_TYPE_CLIPBOARD, StClipboardClass))
G_DECLARE_FINAL_TYPE (StClipboard, st_clipboard, ST, CLIPBOARD, GObject)
typedef struct _StClipboard StClipboard;
typedef struct _StClipboardClass StClipboardClass;
typedef struct _StClipboardPrivate StClipboardPrivate;
/**
@ -67,11 +47,6 @@ struct _StClipboard
StClipboardPrivate *priv;
};
struct _StClipboardClass
{
GObjectClass parent_class;
};
typedef enum {
ST_CLIPBOARD_TYPE_PRIMARY,
ST_CLIPBOARD_TYPE_CLIPBOARD
@ -89,8 +64,6 @@ typedef void (*StClipboardCallbackFunc) (StClipboard *clipboard,
const gchar *text,
gpointer user_data);
GType st_clipboard_get_type (void);
StClipboard* st_clipboard_get_default (void);
void st_clipboard_get_text (StClipboard *clipboard,

View File

@ -36,16 +36,14 @@
#include <cairo.h>
G_DEFINE_TYPE(StDrawingArea, st_drawing_area, ST_TYPE_WIDGET);
typedef struct _StDrawingAreaPrivate StDrawingAreaPrivate;
struct _StDrawingAreaPrivate {
CoglTexture *texture;
CoglPipeline *pipeline;
cairo_t *context;
guint needs_repaint : 1;
guint in_repaint : 1;
};
G_DEFINE_TYPE_WITH_PRIVATE (StDrawingArea, st_drawing_area, ST_TYPE_WIDGET);
/* Signals */
enum
{
@ -55,124 +53,61 @@ enum
static guint st_drawing_area_signals [LAST_SIGNAL] = { 0 };
static void
st_drawing_area_dispose (GObject *object)
static gboolean
draw_content (ClutterCanvas *canvas,
cairo_t *cr,
int width,
int height,
gpointer user_data)
{
StDrawingArea *area = ST_DRAWING_AREA (object);
StDrawingAreaPrivate *priv = area->priv;
StDrawingArea *area = ST_DRAWING_AREA (user_data);
StDrawingAreaPrivate *priv = st_drawing_area_get_instance_private (area);
g_clear_pointer (&priv->pipeline, cogl_object_unref);
g_clear_pointer (&priv->texture, cogl_object_unref);
priv->context = cr;
priv->in_repaint = TRUE;
G_OBJECT_CLASS (st_drawing_area_parent_class)->dispose (object);
clutter_cairo_clear (cr);
g_signal_emit (area, st_drawing_area_signals[REPAINT], 0);
priv->context = NULL;
priv->in_repaint = FALSE;
return TRUE;
}
static void
st_drawing_area_paint (ClutterActor *self)
st_drawing_area_allocate (ClutterActor *self,
const ClutterActorBox *box,
ClutterAllocationFlags flags)
{
StDrawingArea *area = ST_DRAWING_AREA (self);
StDrawingAreaPrivate *priv = area->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self));
ClutterActorBox allocation_box;
ClutterContent *content = clutter_actor_get_content (self);
ClutterActorBox content_box;
int width, height;
(CLUTTER_ACTOR_CLASS (st_drawing_area_parent_class))->paint (self);
clutter_actor_get_allocation_box (self, &allocation_box);
st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
clutter_actor_set_allocation (self, box, flags);
st_theme_node_get_content_box (theme_node, box, &content_box);
width = (int)(0.5 + content_box.x2 - content_box.x1);
height = (int)(0.5 + content_box.y2 - content_box.y1);
if (priv->pipeline == NULL)
{
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
priv->pipeline = cogl_pipeline_new (ctx);
}
if (priv->texture != NULL &&
(width != (int)cogl_texture_get_width (priv->texture) ||
height != (int)cogl_texture_get_height (priv->texture)))
{
cogl_object_unref (priv->texture);
priv->texture = NULL;
}
if (width > 0 && height > 0)
{
if (priv->texture == NULL)
{
priv->texture = cogl_texture_new_with_size (width, height,
COGL_TEXTURE_NONE,
CLUTTER_CAIRO_FORMAT_ARGB32);
priv->needs_repaint = TRUE;
}
if (priv->needs_repaint)
{
cairo_surface_t *surface;
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
priv->context = cairo_create (surface);
priv->in_repaint = TRUE;
priv->needs_repaint = FALSE;
g_signal_emit ((GObject*)area, st_drawing_area_signals[REPAINT], 0);
priv->in_repaint = FALSE;
cairo_destroy (priv->context);
priv->context = NULL;
cogl_texture_set_region (priv->texture, 0, 0, 0, 0, width, height, width, height,
CLUTTER_CAIRO_FORMAT_ARGB32,
cairo_image_surface_get_stride (surface),
cairo_image_surface_get_data (surface));
cairo_surface_destroy (surface);
}
}
cogl_pipeline_set_layer_texture (priv->pipeline, 0, priv->texture);
if (priv->texture)
{
CoglColor color;
guint8 paint_opacity;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
paint_opacity = clutter_actor_get_paint_opacity (self);
cogl_color_init_from_4ub (&color, paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_pipeline_set_color (priv->pipeline, &color);
cogl_framebuffer_draw_rectangle (fb, priv->pipeline,
content_box.x1, content_box.y1,
content_box.x2, content_box.y2);
}
clutter_canvas_set_size (CLUTTER_CANVAS (content), width, height);
}
static void
st_drawing_area_style_changed (StWidget *self)
{
StDrawingArea *area = ST_DRAWING_AREA (self);
StDrawingAreaPrivate *priv = area->priv;
(ST_WIDGET_CLASS (st_drawing_area_parent_class))->style_changed (self);
priv->needs_repaint = TRUE;
st_drawing_area_queue_repaint (ST_DRAWING_AREA (self));
}
static void
st_drawing_area_class_init (StDrawingAreaClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
gobject_class->dispose = st_drawing_area_dispose;
actor_class->paint = st_drawing_area_paint;
actor_class->allocate = st_drawing_area_allocate;
widget_class->style_changed = st_drawing_area_style_changed;
st_drawing_area_signals[REPAINT] =
@ -182,16 +117,15 @@ st_drawing_area_class_init (StDrawingAreaClass *klass)
G_STRUCT_OFFSET (StDrawingAreaClass, repaint),
NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_type_class_add_private (gobject_class, sizeof (StDrawingAreaPrivate));
}
static void
st_drawing_area_init (StDrawingArea *area)
{
area->priv = G_TYPE_INSTANCE_GET_PRIVATE (area, ST_TYPE_DRAWING_AREA,
StDrawingAreaPrivate);
area->priv->texture = NULL;
ClutterContent *content = clutter_canvas_new ();
g_signal_connect (content, "draw", G_CALLBACK (draw_content), area);
clutter_actor_set_content (CLUTTER_ACTOR (area), content);
g_object_unref (content);
}
/**
@ -207,14 +141,9 @@ st_drawing_area_init (StDrawingArea *area)
void
st_drawing_area_queue_repaint (StDrawingArea *area)
{
StDrawingAreaPrivate *priv;
g_return_if_fail (ST_IS_DRAWING_AREA (area));
priv = area->priv;
priv->needs_repaint = TRUE;
clutter_actor_queue_redraw (CLUTTER_ACTOR (area));
clutter_content_invalidate (clutter_actor_get_content (CLUTTER_ACTOR (area)));
}
/**
@ -229,10 +158,14 @@ st_drawing_area_queue_repaint (StDrawingArea *area)
cairo_t *
st_drawing_area_get_context (StDrawingArea *area)
{
g_return_val_if_fail (ST_IS_DRAWING_AREA (area), NULL);
g_return_val_if_fail (area->priv->in_repaint, NULL);
StDrawingAreaPrivate *priv;
return area->priv->context;
g_return_val_if_fail (ST_IS_DRAWING_AREA (area), NULL);
priv = st_drawing_area_get_instance_private (area);
g_return_val_if_fail (priv->in_repaint, NULL);
return priv->context;
}
/**
@ -251,14 +184,19 @@ st_drawing_area_get_surface_size (StDrawingArea *area,
guint *height)
{
StDrawingAreaPrivate *priv;
ClutterContent *content;
float w, h;
g_return_if_fail (ST_IS_DRAWING_AREA (area));
g_return_if_fail (area->priv->in_repaint);
priv = area->priv;
priv = st_drawing_area_get_instance_private (area);
g_return_if_fail (priv->in_repaint);
content = clutter_actor_get_content (CLUTTER_ACTOR (area));
clutter_content_get_preferred_size (content, &w, &h);
if (width)
*width = cogl_texture_get_width (priv->texture);
*width = (guint)w;
if (height)
*height = cogl_texture_get_height (priv->texture);
*height = (guint)h;
}

View File

@ -24,24 +24,9 @@
#include "st-widget.h"
#include <cairo.h>
#define ST_TYPE_DRAWING_AREA (st_drawing_area_get_type ())
#define ST_DRAWING_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_DRAWING_AREA, StDrawingArea))
#define ST_DRAWING_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_DRAWING_AREA, StDrawingAreaClass))
#define ST_IS_DRAWING_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_DRAWING_AREA))
#define ST_IS_DRAWING_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_DRAWING_AREA))
#define ST_DRAWING_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_DRAWING_AREA, StDrawingAreaClass))
typedef struct _StDrawingArea StDrawingArea;
typedef struct _StDrawingAreaClass StDrawingAreaClass;
typedef struct _StDrawingAreaPrivate StDrawingAreaPrivate;
struct _StDrawingArea
{
StWidget parent;
StDrawingAreaPrivate *priv;
};
#define ST_TYPE_DRAWING_AREA (st_drawing_area_get_type ())
G_DECLARE_DERIVABLE_TYPE (StDrawingArea, st_drawing_area,
ST, DRAWING_AREA, StWidget)
struct _StDrawingAreaClass
{
@ -50,8 +35,6 @@ struct _StDrawingAreaClass
void (*repaint) (StDrawingArea *area);
};
GType st_drawing_area_get_type (void) G_GNUC_CONST;
void st_drawing_area_queue_repaint (StDrawingArea *area);
cairo_t *st_drawing_area_get_context (StDrawingArea *area);
void st_drawing_area_get_surface_size (StDrawingArea *area,

View File

@ -87,10 +87,10 @@ enum
LAST_SIGNAL
};
#define ST_ENTRY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_ENTRY, StEntryPrivate))
#define ST_ENTRY_PRIV(x) ((StEntry *) x)->priv
#define ST_ENTRY_PRIV(x) st_entry_get_instance_private ((StEntry *) x)
typedef struct _StEntryPrivate StEntryPrivate;
struct _StEntryPrivate
{
ClutterActor *entry;
@ -108,7 +108,7 @@ struct _StEntryPrivate
static guint entry_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE (StEntry, st_entry, ST_TYPE_WIDGET);
G_DEFINE_TYPE_WITH_PRIVATE (StEntry, st_entry, ST_TYPE_WIDGET);
static GType st_entry_accessible_get_type (void) G_GNUC_CONST;
@ -183,7 +183,8 @@ st_entry_get_property (GObject *gobject,
static void
show_capslock_feedback (StEntry *entry)
{
if (entry->priv->secondary_icon == NULL)
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
if (priv->secondary_icon == NULL)
{
ClutterActor *icon = g_object_new (ST_TYPE_ICON,
"style-class", "capslock-warning",
@ -191,17 +192,18 @@ show_capslock_feedback (StEntry *entry)
NULL);
st_entry_set_secondary_icon (entry, icon);
entry->priv->capslock_warning_shown = TRUE;
priv->capslock_warning_shown = TRUE;
}
}
static void
remove_capslock_feedback (StEntry *entry)
{
if (entry->priv->capslock_warning_shown)
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
if (priv->capslock_warning_shown)
{
st_entry_set_secondary_icon (entry, NULL);
entry->priv->capslock_warning_shown = FALSE;
priv->capslock_warning_shown = FALSE;
}
}
@ -210,8 +212,9 @@ keymap_state_changed (GdkKeymap *keymap,
gpointer user_data)
{
StEntry *entry = ST_ENTRY (user_data);
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
if (clutter_text_get_password_char (CLUTTER_TEXT (entry->priv->entry)) != 0)
if (clutter_text_get_password_char (CLUTTER_TEXT (priv->entry)) != 0)
{
if (gdk_keymap_get_caps_lock_state (keymap))
show_capslock_feedback (entry);
@ -224,7 +227,7 @@ static void
st_entry_dispose (GObject *object)
{
StEntry *entry = ST_ENTRY (object);
StEntryPrivate *priv = entry->priv;
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
GdkKeymap *keymap;
if (priv->entry)
@ -480,7 +483,7 @@ clutter_text_focus_in_cb (ClutterText *text,
ClutterActor *actor)
{
StEntry *entry = ST_ENTRY (actor);
StEntryPrivate *priv = entry->priv;
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
GdkKeymap *keymap;
/* remove the hint if visible */
@ -506,7 +509,7 @@ clutter_text_focus_out_cb (ClutterText *text,
ClutterActor *actor)
{
StEntry *entry = ST_ENTRY (actor);
StEntryPrivate *priv = entry->priv;
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
GdkKeymap *keymap;
st_widget_remove_style_pseudo_class (ST_WIDGET (actor), "focus");
@ -532,8 +535,9 @@ clutter_text_password_char_cb (GObject *object,
gpointer user_data)
{
StEntry *entry = ST_ENTRY (user_data);
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
if (clutter_text_get_password_char (CLUTTER_TEXT (entry->priv->entry)) == 0)
if (clutter_text_get_password_char (CLUTTER_TEXT (priv->entry)) == 0)
remove_capslock_feedback (entry);
}
@ -542,7 +546,8 @@ st_entry_clipboard_callback (StClipboard *clipboard,
const gchar *text,
gpointer data)
{
ClutterText *ctext = (ClutterText*)((StEntry *) data)->priv->entry;
StEntryPrivate *priv = ST_ENTRY_PRIV (data);
ClutterText *ctext = (ClutterText*)priv->entry;
gint cursor_pos;
if (!text)
@ -721,14 +726,15 @@ st_entry_set_cursor (StEntry *entry,
{
cursor_func (entry, use_ibeam, cursor_func_data);
entry->priv->has_ibeam = use_ibeam;
((StEntryPrivate *)ST_ENTRY_PRIV (entry))->has_ibeam = use_ibeam;
}
static gboolean
st_entry_enter_event (ClutterActor *actor,
ClutterCrossingEvent *event)
{
if (event->source == ST_ENTRY (actor)->priv->entry && event->related != NULL)
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
if (event->source == priv->entry && event->related != NULL)
st_entry_set_cursor (ST_ENTRY (actor), TRUE);
return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->enter_event (actor, event);
@ -738,7 +744,8 @@ static gboolean
st_entry_leave_event (ClutterActor *actor,
ClutterCrossingEvent *event)
{
if (event->source == ST_ENTRY (actor)->priv->entry && event->related != NULL)
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
if (event->source == priv->entry && event->related != NULL)
st_entry_set_cursor (ST_ENTRY (actor), FALSE);
return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->leave_event (actor, event);
@ -747,7 +754,8 @@ st_entry_leave_event (ClutterActor *actor,
static void
st_entry_unmap (ClutterActor *actor)
{
if (ST_ENTRY (actor)->priv->has_ibeam)
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
if (priv->has_ibeam)
st_entry_set_cursor (ST_ENTRY (actor), FALSE);
CLUTTER_ACTOR_CLASS (st_entry_parent_class)->unmap (actor);
@ -761,8 +769,6 @@ st_entry_class_init (StEntryClass *klass)
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StEntryPrivate));
gobject_class->set_property = st_entry_set_property;
gobject_class->get_property = st_entry_get_property;
gobject_class->finalize = st_entry_finalize;
@ -858,7 +864,7 @@ st_entry_init (StEntry *entry)
{
StEntryPrivate *priv;
priv = entry->priv = ST_ENTRY_GET_PRIVATE (entry);
priv = st_entry_get_instance_private (entry);
priv->entry = g_object_new (ST_TYPE_IM_TEXT,
"line-alignment", PANGO_ALIGN_LEFT,
@ -920,12 +926,15 @@ st_entry_new (const gchar *text)
const gchar *
st_entry_get_text (StEntry *entry)
{
StEntryPrivate *priv;
g_return_val_if_fail (ST_IS_ENTRY (entry), NULL);
if (entry->priv->hint_visible)
priv = st_entry_get_instance_private (entry);
if (priv->hint_visible)
return "";
else
return clutter_text_get_text (CLUTTER_TEXT (entry->priv->entry));
return clutter_text_get_text (CLUTTER_TEXT (priv->entry));
}
/**
@ -943,7 +952,7 @@ st_entry_set_text (StEntry *entry,
g_return_if_fail (ST_IS_ENTRY (entry));
priv = entry->priv;
priv = st_entry_get_instance_private (entry);
/* set a hint if we are blanking the entry */
if (priv->hint
@ -980,7 +989,7 @@ st_entry_get_clutter_text (StEntry *entry)
{
g_return_val_if_fail (ST_ENTRY (entry), NULL);
return entry->priv->entry;
return ((StEntryPrivate *)ST_ENTRY_PRIV (entry))->entry;
}
/**
@ -1000,7 +1009,7 @@ st_entry_set_hint_text (StEntry *entry,
g_return_if_fail (ST_IS_ENTRY (entry));
priv = entry->priv;
priv = st_entry_get_instance_private (entry);
g_free (priv->hint);
@ -1030,7 +1039,7 @@ st_entry_get_hint_text (StEntry *entry)
{
g_return_val_if_fail (ST_IS_ENTRY (entry), NULL);
return entry->priv->hint;
return ((StEntryPrivate *)ST_ENTRY_PRIV (entry))->hint;
}
/**
@ -1046,11 +1055,13 @@ void
st_entry_set_input_purpose (StEntry *entry,
GtkInputPurpose purpose)
{
StEntryPrivate *priv;
StIMText *imtext;
g_return_if_fail (ST_IS_ENTRY (entry));
imtext = ST_IM_TEXT (entry->priv->entry);
priv = st_entry_get_instance_private (entry);
imtext = ST_IM_TEXT (priv->entry);
if (st_im_text_get_input_purpose (imtext) != purpose)
{
@ -1069,9 +1080,12 @@ st_entry_set_input_purpose (StEntry *entry,
GtkInputPurpose
st_entry_get_input_purpose (StEntry *entry)
{
StEntryPrivate *priv;
g_return_val_if_fail (ST_IS_ENTRY (entry), GTK_INPUT_PURPOSE_FREE_FORM);
return st_im_text_get_input_purpose (ST_IM_TEXT (entry->priv->entry));
priv = st_entry_get_instance_private (entry);
return st_im_text_get_input_purpose (ST_IM_TEXT (priv->entry));
}
/**
@ -1086,11 +1100,13 @@ void
st_entry_set_input_hints (StEntry *entry,
GtkInputHints hints)
{
StEntryPrivate *priv;
StIMText *imtext;
g_return_if_fail (ST_IS_ENTRY (entry));
imtext = ST_IM_TEXT (entry->priv->entry);
priv = st_entry_get_instance_private (entry);
imtext = ST_IM_TEXT (priv->entry);
if (st_im_text_get_input_hints (imtext) != hints)
{
@ -1109,9 +1125,12 @@ st_entry_set_input_hints (StEntry *entry,
GtkInputHints
st_entry_get_input_hints (StEntry *entry)
{
StEntryPrivate *priv;
g_return_val_if_fail (ST_IS_ENTRY (entry), GTK_INPUT_HINT_NONE);
return st_im_text_get_input_hints (ST_IM_TEXT (entry->priv->entry));
priv = st_entry_get_instance_private (entry);
return st_im_text_get_input_hints (ST_IM_TEXT (priv->entry));
}
static gboolean
@ -1119,7 +1138,7 @@ _st_entry_icon_press_cb (ClutterActor *actor,
ClutterButtonEvent *event,
StEntry *entry)
{
StEntryPrivate *priv = entry->priv;
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
if (actor == priv->primary_icon)
g_signal_emit (entry, entry_signals[PRIMARY_ICON_CLICKED], 0);
@ -1171,7 +1190,7 @@ st_entry_set_primary_icon (StEntry *entry,
g_return_if_fail (ST_IS_ENTRY (entry));
priv = entry->priv;
priv = st_entry_get_instance_private (entry);
_st_entry_set_icon (entry, &priv->primary_icon, icon);
}
@ -1191,7 +1210,7 @@ st_entry_set_secondary_icon (StEntry *entry,
g_return_if_fail (ST_IS_ENTRY (entry));
priv = entry->priv;
priv = st_entry_get_instance_private (entry);
_st_entry_set_icon (entry, &priv->secondary_icon, icon);
}
@ -1242,6 +1261,7 @@ static gint
st_entry_accessible_get_n_children (AtkObject *obj)
{
StEntry *entry = NULL;
StEntryPrivate *priv;
g_return_val_if_fail (ST_IS_ENTRY_ACCESSIBLE (obj), 0);
@ -1250,7 +1270,8 @@ st_entry_accessible_get_n_children (AtkObject *obj)
if (entry == NULL)
return 0;
if (entry->priv->entry == NULL)
priv = st_entry_get_instance_private (entry);
if (priv->entry == NULL)
return 0;
else
return 1;
@ -1261,6 +1282,7 @@ st_entry_accessible_ref_child (AtkObject *obj,
gint i)
{
StEntry *entry = NULL;
StEntryPrivate *priv;
AtkObject *result = NULL;
g_return_val_if_fail (ST_IS_ENTRY_ACCESSIBLE (obj), NULL);
@ -1271,10 +1293,11 @@ st_entry_accessible_ref_child (AtkObject *obj,
if (entry == NULL)
return NULL;
if (entry->priv->entry == NULL)
priv = st_entry_get_instance_private (entry);
if (priv->entry == NULL)
return NULL;
result = clutter_actor_get_accessible (entry->priv->entry);
result = clutter_actor_get_accessible (priv->entry);
g_object_ref (result);
return result;

View File

@ -28,30 +28,8 @@ G_BEGIN_DECLS
#include <st/st-widget.h>
#define ST_TYPE_ENTRY (st_entry_get_type ())
#define ST_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_ENTRY, StEntry))
#define ST_IS_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_ENTRY))
#define ST_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_ENTRY, StEntryClass))
#define ST_IS_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_ENTRY))
#define ST_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_ENTRY, StEntryClass))
typedef struct _StEntry StEntry;
typedef struct _StEntryPrivate StEntryPrivate;
typedef struct _StEntryClass StEntryClass;
/**
* StEntry:
*
* The contents of this structure is private and should only be accessed using
* the provided API.
*/
struct _StEntry
{
/*< private >*/
StWidget parent_instance;
StEntryPrivate *priv;
};
#define ST_TYPE_ENTRY (st_entry_get_type ())
G_DECLARE_DERIVABLE_TYPE (StEntry, st_entry, ST, ENTRY, StWidget)
struct _StEntryClass
{
@ -62,8 +40,6 @@ struct _StEntryClass
void (*secondary_icon_clicked) (StEntry *entry);
};
GType st_entry_get_type (void) G_GNUC_CONST;
StWidget *st_entry_new (const gchar *text);
const gchar *st_entry_get_text (StEntry *entry);
void st_entry_set_text (StEntry *entry,

View File

@ -33,14 +33,12 @@
#include "st-focus-manager.h"
#define ST_FOCUS_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_FOCUS_MANAGER, StFocusManagerPrivate))
struct _StFocusManagerPrivate
{
GHashTable *groups;
};
G_DEFINE_TYPE (StFocusManager, st_focus_manager, G_TYPE_OBJECT)
G_DEFINE_TYPE_WITH_PRIVATE (StFocusManager, st_focus_manager, G_TYPE_OBJECT)
static void
st_focus_manager_dispose (GObject *object)
@ -61,15 +59,13 @@ st_focus_manager_class_init (StFocusManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (StFocusManagerPrivate));
object_class->dispose = st_focus_manager_dispose;
}
static void
st_focus_manager_init (StFocusManager *manager)
{
manager->priv = ST_FOCUS_MANAGER_GET_PRIVATE (manager);
manager->priv = st_focus_manager_get_instance_private (manager);
manager->priv->groups = g_hash_table_new (NULL, NULL);
}

View File

@ -31,15 +31,10 @@
G_BEGIN_DECLS
#define ST_TYPE_FOCUS_MANAGER (st_focus_manager_get_type ())
#define ST_FOCUS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_FOCUS_MANAGER, StFocusManager))
#define ST_IS_FOCUS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_FOCUS_MANAGER))
#define ST_FOCUS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_FOCUS_MANAGER, StFocusManagerClass))
#define ST_IS_FOCUS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_FOCUS_MANAGER))
#define ST_FOCUS_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_FOCUS_MANAGER, StFocusManagerClass))
G_DECLARE_FINAL_TYPE (StFocusManager, st_focus_manager, ST, FOCUS_MANAGER, GObject)
typedef struct _StFocusManager StFocusManager;
typedef struct _StFocusManagerPrivate StFocusManagerPrivate;
typedef struct _StFocusManagerClass StFocusManagerClass;
/**
* StFocusManager:
@ -54,19 +49,6 @@ struct _StFocusManager
StFocusManagerPrivate *priv;
};
/**
* StFocusManagerClass:
*
* The #StFocusManagerClass struct contains only private data
*/
struct _StFocusManagerClass
{
/*< private >*/
GObjectClass parent_class;
};
GType st_focus_manager_get_type (void) G_GNUC_CONST;
StFocusManager *st_focus_manager_get_for_stage (ClutterStage *stage);
void st_focus_manager_add_group (StFocusManager *manager,

View File

@ -42,11 +42,6 @@ enum
PROP_FALLBACK_ICON_NAME
};
G_DEFINE_TYPE (StIcon, st_icon, ST_TYPE_WIDGET)
#define ST_ICON_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_ICON, StIconPrivate))
struct _StIconPrivate
{
ClutterActor *icon_texture;
@ -65,6 +60,8 @@ struct _StIconPrivate
StShadow *shadow_spec;
};
G_DEFINE_TYPE_WITH_PRIVATE (StIcon, st_icon, ST_TYPE_WIDGET)
static void st_icon_update (StIcon *icon);
static gboolean st_icon_update_icon_size (StIcon *icon);
@ -220,8 +217,6 @@ st_icon_class_init (StIconClass *klass)
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
g_type_class_add_private (klass, sizeof (StIconPrivate));
object_class->get_property = st_icon_get_property;
object_class->set_property = st_icon_set_property;
object_class->dispose = st_icon_dispose;
@ -262,7 +257,7 @@ st_icon_init (StIcon *self)
{
ClutterLayoutManager *layout_manager;
self->priv = ST_ICON_GET_PRIVATE (self);
self->priv = st_icon_get_instance_private (self);
layout_manager = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FILL,
CLUTTER_BIN_ALIGNMENT_FILL);

View File

@ -37,21 +37,7 @@
G_BEGIN_DECLS
#define ST_TYPE_ICON st_icon_get_type()
#define ST_ICON(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_ICON, StIcon))
#define ST_ICON_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_ICON, StIconClass))
#define ST_IS_ICON(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_ICON))
#define ST_IS_ICON_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_ICON))
#define ST_ICON_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_ICON, StIconClass))
G_DECLARE_FINAL_TYPE (StIcon, st_icon, ST, ICON, StWidget)
typedef struct _StIconPrivate StIconPrivate;
@ -61,25 +47,12 @@ typedef struct _StIconPrivate StIconPrivate;
* The contents of this structure are private and should only be accessed
* through the public API.
*/
typedef struct {
struct _StIcon {
/*< private >*/
StWidget parent;
StIconPrivate *priv;
} StIcon;
typedef struct {
StWidgetClass parent_class;
/* padding for future expansion */
void (*_padding_0) (void);
void (*_padding_1) (void);
void (*_padding_2) (void);
void (*_padding_3) (void);
void (*_padding_4) (void);
} StIconClass;
GType st_icon_get_type (void);
};
ClutterActor* st_icon_new (void);

View File

@ -58,9 +58,6 @@ enum
PROP_INPUT_HINTS,
};
#define ST_IM_TEXT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_IM_TEXT, StIMTextPrivate))
struct _StIMTextPrivate
{
GtkIMContext *im_context;
@ -70,7 +67,7 @@ struct _StIMTextPrivate
guint has_preedit : 1;
};
G_DEFINE_TYPE (StIMText, st_im_text, CLUTTER_TYPE_TEXT)
G_DEFINE_TYPE_WITH_PRIVATE (StIMText, st_im_text, CLUTTER_TYPE_TEXT)
static void
st_im_text_dispose (GObject *object)
@ -461,8 +458,6 @@ st_im_text_class_init (StIMTextClass *klass)
ClutterTextClass *text_class = CLUTTER_TEXT_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StIMTextPrivate));
object_class->dispose = st_im_text_dispose;
object_class->set_property = st_im_text_set_property;
object_class->get_property = st_im_text_get_property;
@ -504,7 +499,7 @@ st_im_text_init (StIMText *self)
{
StIMTextPrivate *priv;
self->priv = priv = ST_IM_TEXT_GET_PRIVATE (self);
self->priv = priv = st_im_text_get_instance_private (self);
priv->im_context = gtk_im_multicontext_new ();
g_signal_connect (priv->im_context, "commit",

View File

@ -36,15 +36,10 @@ G_BEGIN_DECLS
#include <clutter/clutter.h>
#define ST_TYPE_IM_TEXT (st_im_text_get_type ())
#define ST_IM_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_IM_TEXT, StIMText))
#define ST_IS_IM_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_IM_TEXT))
#define ST_IM_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_IM_TEXT, StIMTextClass))
#define ST_IS_IM_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_IM_TEXT))
#define ST_IM_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_IM_TEXT, StIMTextClass))
G_DECLARE_FINAL_TYPE (StIMText, st_im_text, ST, IM_TEXT, ClutterText)
typedef struct _StIMText StIMText;
typedef struct _StIMTextPrivate StIMTextPrivate;
typedef struct _StIMTextClass StIMTextClass;
struct _StIMText
{
@ -53,13 +48,6 @@ struct _StIMText
StIMTextPrivate *priv;
};
struct _StIMTextClass
{
ClutterTextClass parent_class;
};
GType st_im_text_get_type (void) G_GNUC_CONST;
ClutterActor *st_im_text_new (const gchar *text);
void st_im_text_set_input_purpose (StIMText *imtext,
GtkInputPurpose purpose);

View File

@ -54,8 +54,6 @@ enum
PROP_TEXT
};
#define ST_LABEL_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_LABEL, StLabelPrivate))
struct _StLabelPrivate
{
ClutterActor *label;
@ -65,7 +63,7 @@ struct _StLabelPrivate
float shadow_height;
};
G_DEFINE_TYPE (StLabel, st_label, ST_TYPE_WIDGET);
G_DEFINE_TYPE_WITH_PRIVATE (StLabel, st_label, ST_TYPE_WIDGET);
static GType st_label_accessible_get_type (void) G_GNUC_CONST;
@ -239,8 +237,6 @@ st_label_class_init (StLabelClass *klass)
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StLabelPrivate));
gobject_class->set_property = st_label_set_property;
gobject_class->get_property = st_label_get_property;
gobject_class->dispose = st_label_dispose;
@ -273,7 +269,7 @@ st_label_init (StLabel *label)
{
StLabelPrivate *priv;
label->priv = priv = ST_LABEL_GET_PRIVATE (label);
label->priv = priv = st_label_get_instance_private (label);
label->priv->label = g_object_new (CLUTTER_TYPE_TEXT,
"ellipsize", PANGO_ELLIPSIZE_END,

View File

@ -29,15 +29,9 @@ G_BEGIN_DECLS
#include <st/st-widget.h>
#define ST_TYPE_LABEL (st_label_get_type ())
#define ST_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_LABEL, StLabel))
#define ST_IS_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_LABEL))
#define ST_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_LABEL, StLabelClass))
#define ST_IS_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_LABEL))
#define ST_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_LABEL, StLabelClass))
G_DECLARE_FINAL_TYPE (StLabel, st_label, ST, LABEL, StWidget)
typedef struct _StLabel StLabel;
typedef struct _StLabelPrivate StLabelPrivate;
typedef struct _StLabelClass StLabelClass;
/**
* StLabel:
@ -53,13 +47,6 @@ struct _StLabel
StLabelPrivate *priv;
};
struct _StLabelClass
{
StWidgetClass parent_class;
};
GType st_label_get_type (void) G_GNUC_CONST;
StWidget * st_label_new (const gchar *text);
const gchar * st_label_get_text (StLabel *label);
void st_label_set_text (StLabel *label,

View File

@ -211,7 +211,7 @@ calculate_gaussian_kernel (gdouble sigma,
{
gdouble *ret, sum;
gdouble exp_divisor;
int half, i;
guint half, i;
g_return_val_if_fail (sigma > 0, NULL);
@ -223,14 +223,14 @@ calculate_gaussian_kernel (gdouble sigma,
exp_divisor = 2 * sigma * sigma;
/* n_values of 1D Gauss function */
for (i = 0; i < (int)n_values; i++)
for (i = 0; i < n_values; i++)
{
ret[i] = exp (-(i - half) * (i - half) / exp_divisor);
sum += ret[i];
}
/* normalize */
for (i = 0; i < (int)n_values; i++)
for (i = 0; i < n_values; i++)
ret[i] /= sum;
return ret;

View File

@ -41,13 +41,10 @@
#include "st-private.h"
#include "st-button.h"
G_DEFINE_TYPE (StScrollBar, st_scroll_bar, ST_TYPE_WIDGET)
#define ST_SCROLL_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ST_TYPE_SCROLL_BAR, StScrollBarPrivate))
#define PAGING_INITIAL_REPEAT_TIMEOUT 500
#define PAGING_SUBSEQUENT_REPEAT_TIMEOUT 200
typedef struct _StScrollBarPrivate StScrollBarPrivate;
struct _StScrollBarPrivate
{
StAdjustment *adjustment;
@ -72,6 +69,10 @@ struct _StScrollBarPrivate
guint vertical : 1;
};
G_DEFINE_TYPE_WITH_PRIVATE (StScrollBar, st_scroll_bar, ST_TYPE_WIDGET)
#define ST_SCROLL_BAR_PRIVATE(sb) st_scroll_bar_get_instance_private (ST_SCROLL_BAR (sb))
enum
{
PROP_0,
@ -105,7 +106,7 @@ st_scroll_bar_get_property (GObject *gobject,
GValue *value,
GParamSpec *pspec)
{
StScrollBarPrivate *priv = ST_SCROLL_BAR (gobject)->priv;
StScrollBarPrivate *priv = ST_SCROLL_BAR_PRIVATE (gobject);
switch (prop_id)
{
@ -130,6 +131,7 @@ st_scroll_bar_set_property (GObject *gobject,
GParamSpec *pspec)
{
StScrollBar *bar = ST_SCROLL_BAR (gobject);
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
switch (prop_id)
{
@ -138,12 +140,12 @@ st_scroll_bar_set_property (GObject *gobject,
break;
case PROP_VERTICAL:
bar->priv->vertical = g_value_get_boolean (value);
if (bar->priv->vertical)
clutter_actor_set_name (CLUTTER_ACTOR (bar->priv->handle),
priv->vertical = g_value_get_boolean (value);
if (priv->vertical)
clutter_actor_set_name (CLUTTER_ACTOR (priv->handle),
"vhandle");
else
clutter_actor_set_name (CLUTTER_ACTOR (bar->priv->handle),
clutter_actor_set_name (CLUTTER_ACTOR (priv->handle),
"hhandle");
clutter_actor_queue_relayout ((ClutterActor*) gobject);
break;
@ -158,7 +160,7 @@ static void
st_scroll_bar_dispose (GObject *gobject)
{
StScrollBar *bar = ST_SCROLL_BAR (gobject);
StScrollBarPrivate *priv = bar->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
if (priv->adjustment)
st_scroll_bar_set_adjustment (bar, NULL);
@ -191,7 +193,7 @@ scroll_bar_allocate_children (StScrollBar *bar,
const ClutterActorBox *box,
ClutterAllocationFlags flags)
{
StScrollBarPrivate *priv = bar->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (bar));
ClutterActorBox content_box, trough_box;
@ -283,7 +285,7 @@ st_scroll_bar_get_preferred_width (ClutterActor *self,
gfloat *natural_width_p)
{
StScrollBar *bar = ST_SCROLL_BAR (self);
StScrollBarPrivate *priv = bar->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self));
gfloat trough_min_width, trough_natural_width;
gfloat handle_min_width, handle_natural_width;
@ -323,7 +325,7 @@ st_scroll_bar_get_preferred_height (ClutterActor *self,
gfloat *natural_height_p)
{
StScrollBar *bar = ST_SCROLL_BAR (self);
StScrollBarPrivate *priv = bar->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self));
gfloat trough_min_height, trough_natural_height;
gfloat handle_min_height, handle_natural_height;
@ -394,7 +396,7 @@ scroll_bar_update_positions (StScrollBar *bar)
static void
st_scroll_bar_style_changed (StWidget *widget)
{
StScrollBarPrivate *priv = ST_SCROLL_BAR (widget)->priv;
StScrollBarPrivate *priv = ST_SCROLL_BAR_PRIVATE (widget);
st_widget_style_changed (ST_WIDGET (priv->trough));
st_widget_style_changed (ST_WIDGET (priv->handle));
@ -408,8 +410,9 @@ bar_reactive_notify_cb (GObject *gobject,
gpointer user_data)
{
StScrollBar *bar = ST_SCROLL_BAR (gobject);
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
clutter_actor_set_reactive (bar->priv->handle,
clutter_actor_set_reactive (priv->handle,
clutter_actor_get_reactive (CLUTTER_ACTOR (bar)));
}
@ -462,7 +465,7 @@ static gboolean
st_scroll_bar_scroll_event (ClutterActor *actor,
ClutterScrollEvent *event)
{
StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv;
StScrollBarPrivate *priv = ST_SCROLL_BAR_PRIVATE (actor);
if (clutter_event_is_pointer_emulated ((ClutterEvent *) event))
return TRUE;
@ -502,8 +505,6 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StScrollBarPrivate));
object_class->get_property = st_scroll_bar_get_property;
object_class->set_property = st_scroll_bar_set_property;
object_class->dispose = st_scroll_bar_dispose;
@ -555,7 +556,7 @@ move_slider (StScrollBar *bar,
gfloat x,
gfloat y)
{
StScrollBarPrivate *priv = bar->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
gdouble position, lower, upper, page_size;
gfloat ux, uy, pos, size;
@ -599,13 +600,14 @@ move_slider (StScrollBar *bar,
static void
stop_scrolling (StScrollBar *bar)
{
if (!bar->priv->grabbed)
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
if (!priv->grabbed)
return;
st_widget_remove_style_pseudo_class (ST_WIDGET (bar->priv->handle), "active");
st_widget_remove_style_pseudo_class (ST_WIDGET (priv->handle), "active");
clutter_ungrab_pointer ();
bar->priv->grabbed = FALSE;
priv->grabbed = FALSE;
g_signal_emit (bar, signals[SCROLL_STOP], 0);
}
@ -614,7 +616,8 @@ handle_motion_event_cb (ClutterActor *trough,
ClutterMotionEvent *event,
StScrollBar *bar)
{
if (!bar->priv->grabbed)
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
if (!priv->grabbed)
return FALSE;
move_slider (bar, event->x, event->y);
@ -638,7 +641,7 @@ handle_button_press_event_cb (ClutterActor *actor,
ClutterButtonEvent *event,
StScrollBar *bar)
{
StScrollBarPrivate *priv = bar->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
if (event->button != 1)
return FALSE;
@ -676,6 +679,7 @@ animation_completed_cb (ClutterAnimation *animation,
static gboolean
trough_paging_cb (StScrollBar *self)
{
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
gfloat handle_pos, event_pos, tx, ty;
gdouble value;
gdouble page_increment;
@ -686,66 +690,66 @@ trough_paging_cb (StScrollBar *self)
GValue v = { 0, };
ClutterTimeline *t;
if (self->priv->paging_event_no == 0)
if (priv->paging_event_no == 0)
{
/* Scroll on after initial timeout. */
mode = CLUTTER_EASE_OUT_CUBIC;
ret = FALSE;
self->priv->paging_event_no = 1;
self->priv->paging_source_id = g_timeout_add (
priv->paging_event_no = 1;
priv->paging_source_id = g_timeout_add (
PAGING_INITIAL_REPEAT_TIMEOUT,
(GSourceFunc) trough_paging_cb,
self);
g_source_set_name_by_id (self->priv->paging_source_id, "[gnome-shell] trough_paging_cb");
g_source_set_name_by_id (priv->paging_source_id, "[gnome-shell] trough_paging_cb");
}
else if (self->priv->paging_event_no == 1)
else if (priv->paging_event_no == 1)
{
/* Scroll on after subsequent timeout. */
ret = FALSE;
mode = CLUTTER_EASE_IN_CUBIC;
self->priv->paging_event_no = 2;
self->priv->paging_source_id = g_timeout_add (
priv->paging_event_no = 2;
priv->paging_source_id = g_timeout_add (
PAGING_SUBSEQUENT_REPEAT_TIMEOUT,
(GSourceFunc) trough_paging_cb,
self);
g_source_set_name_by_id (self->priv->paging_source_id, "[gnome-shell] trough_paging_cb");
g_source_set_name_by_id (priv->paging_source_id, "[gnome-shell] trough_paging_cb");
}
else
{
/* Keep scrolling. */
ret = TRUE;
mode = CLUTTER_LINEAR;
self->priv->paging_event_no++;
priv->paging_event_no++;
}
/* Do the scrolling */
st_adjustment_get_values (self->priv->adjustment,
st_adjustment_get_values (priv->adjustment,
&value, NULL, NULL,
NULL, &page_increment, NULL);
if (self->priv->vertical)
handle_pos = clutter_actor_get_y (self->priv->handle);
if (priv->vertical)
handle_pos = clutter_actor_get_y (priv->handle);
else
handle_pos = clutter_actor_get_x (self->priv->handle);
handle_pos = clutter_actor_get_x (priv->handle);
clutter_actor_transform_stage_point (CLUTTER_ACTOR (self->priv->trough),
self->priv->move_x,
self->priv->move_y,
clutter_actor_transform_stage_point (CLUTTER_ACTOR (priv->trough),
priv->move_x,
priv->move_y,
&tx, &ty);
if (self->priv->vertical)
if (priv->vertical)
event_pos = ty;
else
event_pos = tx;
if (event_pos > handle_pos)
{
if (self->priv->paging_direction == NONE)
if (priv->paging_direction == NONE)
{
/* Remember direction. */
self->priv->paging_direction = DOWN;
priv->paging_direction = DOWN;
}
if (self->priv->paging_direction == UP)
if (priv->paging_direction == UP)
{
/* Scrolled far enough. */
return FALSE;
@ -754,12 +758,12 @@ trough_paging_cb (StScrollBar *self)
}
else
{
if (self->priv->paging_direction == NONE)
if (priv->paging_direction == NONE)
{
/* Remember direction. */
self->priv->paging_direction = UP;
priv->paging_direction = UP;
}
if (self->priv->paging_direction == DOWN)
if (priv->paging_direction == DOWN)
{
/* Scrolled far enough. */
return FALSE;
@ -767,24 +771,23 @@ trough_paging_cb (StScrollBar *self)
value -= page_increment;
}
if (self->priv->paging_animation)
if (priv->paging_animation)
{
clutter_animation_completed (self->priv->paging_animation);
clutter_animation_completed (priv->paging_animation);
}
/* FIXME: Creating a new animation for each scroll is probably not the best
* idea, but it's a lot less involved than extenind the current animation */
a = self->priv->paging_animation = g_object_new (CLUTTER_TYPE_ANIMATION,
"object", self->priv->adjustment,
a = priv->paging_animation = g_object_new (CLUTTER_TYPE_ANIMATION,
"object", priv->adjustment,
"duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor),
"mode", mode,
NULL);
g_value_init (&v, G_TYPE_DOUBLE);
g_value_set_double (&v, value);
clutter_animation_bind (self->priv->paging_animation, "value", &v);
t = clutter_animation_get_timeline (self->priv->paging_animation);
g_signal_connect (a, "completed", G_CALLBACK (animation_completed_cb),
self->priv);
clutter_animation_bind (priv->paging_animation, "value", &v);
t = clutter_animation_get_timeline (priv->paging_animation);
g_signal_connect (a, "completed", G_CALLBACK (animation_completed_cb), priv);
clutter_timeline_start (t);
return ret;
@ -795,18 +798,21 @@ trough_button_press_event_cb (ClutterActor *actor,
ClutterButtonEvent *event,
StScrollBar *self)
{
StScrollBarPrivate *priv;
g_return_val_if_fail (self, FALSE);
if (event->button != 1)
return FALSE;
if (self->priv->adjustment == NULL)
priv = st_scroll_bar_get_instance_private (self);
if (priv->adjustment == NULL)
return FALSE;
self->priv->move_x = event->x;
self->priv->move_y = event->y;
self->priv->paging_direction = NONE;
self->priv->paging_event_no = 0;
priv->move_x = event->x;
priv->move_y = event->y;
priv->paging_direction = NONE;
priv->paging_event_no = 0;
trough_paging_cb (self);
return TRUE;
@ -817,13 +823,15 @@ trough_button_release_event_cb (ClutterActor *actor,
ClutterButtonEvent *event,
StScrollBar *self)
{
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
if (event->button != 1)
return FALSE;
if (self->priv->paging_source_id)
if (priv->paging_source_id)
{
g_source_remove (self->priv->paging_source_id);
self->priv->paging_source_id = 0;
g_source_remove (priv->paging_source_id);
priv->paging_source_id = 0;
}
return TRUE;
@ -834,10 +842,12 @@ trough_leave_event_cb (ClutterActor *actor,
ClutterEvent *event,
StScrollBar *self)
{
if (self->priv->paging_source_id)
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
if (priv->paging_source_id)
{
g_source_remove (self->priv->paging_source_id);
self->priv->paging_source_id = 0;
g_source_remove (priv->paging_source_id);
priv->paging_source_id = 0;
return TRUE;
}
@ -847,7 +857,7 @@ trough_leave_event_cb (ClutterActor *actor,
static void
st_scroll_bar_notify_reactive (StScrollBar *self)
{
StScrollBarPrivate *priv = self->priv;
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
gboolean reactive = clutter_actor_get_reactive (CLUTTER_ACTOR (self));
@ -858,29 +868,29 @@ st_scroll_bar_notify_reactive (StScrollBar *self)
static void
st_scroll_bar_init (StScrollBar *self)
{
self->priv = ST_SCROLL_BAR_GET_PRIVATE (self);
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
self->priv->trough = (ClutterActor *) st_bin_new ();
clutter_actor_set_reactive ((ClutterActor *) self->priv->trough, TRUE);
clutter_actor_set_name (CLUTTER_ACTOR (self->priv->trough), "trough");
priv->trough = (ClutterActor *) st_bin_new ();
clutter_actor_set_reactive ((ClutterActor *) priv->trough, TRUE);
clutter_actor_set_name (CLUTTER_ACTOR (priv->trough), "trough");
clutter_actor_add_child (CLUTTER_ACTOR (self),
CLUTTER_ACTOR (self->priv->trough));
g_signal_connect (self->priv->trough, "button-press-event",
CLUTTER_ACTOR (priv->trough));
g_signal_connect (priv->trough, "button-press-event",
G_CALLBACK (trough_button_press_event_cb), self);
g_signal_connect (self->priv->trough, "button-release-event",
g_signal_connect (priv->trough, "button-release-event",
G_CALLBACK (trough_button_release_event_cb), self);
g_signal_connect (self->priv->trough, "leave-event",
g_signal_connect (priv->trough, "leave-event",
G_CALLBACK (trough_leave_event_cb), self);
self->priv->handle = (ClutterActor *) st_button_new ();
clutter_actor_set_name (CLUTTER_ACTOR (self->priv->handle), "hhandle");
priv->handle = (ClutterActor *) st_button_new ();
clutter_actor_set_name (CLUTTER_ACTOR (priv->handle), "hhandle");
clutter_actor_add_child (CLUTTER_ACTOR (self),
CLUTTER_ACTOR (self->priv->handle));
g_signal_connect (self->priv->handle, "button-press-event",
CLUTTER_ACTOR (priv->handle));
g_signal_connect (priv->handle, "button-press-event",
G_CALLBACK (handle_button_press_event_cb), self);
g_signal_connect (self->priv->handle, "button-release-event",
g_signal_connect (priv->handle, "button-release-event",
G_CALLBACK (handle_button_release_event_cb), self);
g_signal_connect (self->priv->handle, "motion-event",
g_signal_connect (priv->handle, "motion-event",
G_CALLBACK (handle_motion_event_cb), self);
clutter_actor_set_reactive (CLUTTER_ACTOR (self), TRUE);
@ -920,7 +930,7 @@ st_scroll_bar_set_adjustment (StScrollBar *bar,
g_return_if_fail (ST_IS_SCROLL_BAR (bar));
priv = bar->priv;
priv = st_scroll_bar_get_instance_private (bar);
if (adjustment == priv->adjustment)
return;
@ -968,6 +978,6 @@ st_scroll_bar_get_adjustment (StScrollBar *bar)
{
g_return_val_if_fail (ST_IS_SCROLL_BAR (bar), NULL);
return bar->priv->adjustment;
return ((StScrollBarPrivate *)ST_SCROLL_BAR_PRIVATE (bar))->adjustment;
}

View File

@ -30,30 +30,8 @@
G_BEGIN_DECLS
#define ST_TYPE_SCROLL_BAR (st_scroll_bar_get_type())
#define ST_SCROLL_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_SCROLL_BAR, StScrollBar))
#define ST_IS_SCROLL_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_SCROLL_BAR))
#define ST_SCROLL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_SCROLL_BAR, StScrollBarClass))
#define ST_IS_SCROLL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_SCROLL_BAR))
#define ST_SCROLL_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_SCROLL_BAR, StScrollBarClass))
typedef struct _StScrollBar StScrollBar;
typedef struct _StScrollBarPrivate StScrollBarPrivate;
typedef struct _StScrollBarClass StScrollBarClass;
/**
* StScrollBar:
*
* The contents of this structure are private and should only be accessed
* through the public API.
*/
struct _StScrollBar
{
/*< private >*/
StWidget parent_instance;
StScrollBarPrivate *priv;
};
#define ST_TYPE_SCROLL_BAR (st_scroll_bar_get_type())
G_DECLARE_DERIVABLE_TYPE (StScrollBar, st_scroll_bar, ST, SCROLL_BAR, StWidget)
struct _StScrollBarClass
{
@ -64,8 +42,6 @@ struct _StScrollBarClass
void (*scroll_stop) (StScrollBar *bar);
};
GType st_scroll_bar_get_type (void) G_GNUC_CONST;
StWidget *st_scroll_bar_new (StAdjustment *adjustment);
void st_scroll_bar_set_adjustment (StScrollBar *bar,

View File

@ -19,10 +19,6 @@
*/
#define ST_SCROLL_VIEW_FADE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_SCROLL_VIEW_FADE, StScrollViewFadeClass))
#define ST_IS_SCROLL_VIEW_FADE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_SCROLL_VIEW_FADE))
#define ST_SCROLL_VIEW_FADE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_SCROLL_VIEW_FADE, StScrollViewFadeClass))
#include "st-scroll-view-fade.h"
#include "st-scroll-view.h"
#include "st-widget.h"
@ -33,8 +29,6 @@
#include <clutter/clutter.h>
#include <cogl/cogl.h>
typedef struct _StScrollViewFadeClass StScrollViewFadeClass;
#define DEFAULT_FADE_OFFSET 68.0f
#include "st-scroll-view-fade-generated.c"
@ -55,11 +49,6 @@ struct _StScrollViewFade
float hfade_offset;
};
struct _StScrollViewFadeClass
{
ClutterShaderEffectClass parent_class;
};
G_DEFINE_TYPE (StScrollViewFade,
st_scroll_view_fade,
CLUTTER_TYPE_SHADER_EFFECT);

View File

@ -26,12 +26,8 @@
G_BEGIN_DECLS
#define ST_TYPE_SCROLL_VIEW_FADE (st_scroll_view_fade_get_type ())
#define ST_SCROLL_VIEW_FADE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_SCROLL_VIEW_FADE, StScrollViewFade))
#define ST_IS_SCROLL_VIEW_FADE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_SCROLL_VIEW_FADE))
typedef struct _StScrollViewFade StScrollViewFade;
GType st_scroll_view_fade_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StScrollViewFade, st_scroll_view_fade,
ST, SCROLL_VIEW_FADE, ClutterShaderEffect)
ClutterEffect *st_scroll_view_fade_new (void);

View File

@ -69,14 +69,6 @@ static void clutter_container_iface_init (ClutterContainerIface *iface);
static ClutterContainerIface *st_scroll_view_parent_iface = NULL;
G_DEFINE_TYPE_WITH_CODE (StScrollView, st_scroll_view, ST_TYPE_BIN,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
clutter_container_iface_init))
#define SCROLL_VIEW_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
ST_TYPE_SCROLL_VIEW, \
StScrollViewPrivate))
struct _StScrollViewPrivate
{
/* a pointer to the child; this is actually stored
@ -106,6 +98,11 @@ struct _StScrollViewPrivate
guint vscrollbar_visible : 1;
};
G_DEFINE_TYPE_WITH_CODE (StScrollView, st_scroll_view, ST_TYPE_BIN,
G_ADD_PRIVATE (StScrollView)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
clutter_container_iface_init))
enum {
PROP_0,
@ -790,8 +787,6 @@ st_scroll_view_class_init (StScrollViewClass *klass)
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
g_type_class_add_private (klass, sizeof (StScrollViewPrivate));
object_class->get_property = st_scroll_view_get_property;
object_class->set_property = st_scroll_view_set_property;
object_class->dispose = st_scroll_view_dispose;
@ -874,7 +869,7 @@ st_scroll_view_class_init (StScrollViewClass *klass)
static void
st_scroll_view_init (StScrollView *self)
{
StScrollViewPrivate *priv = self->priv = SCROLL_VIEW_PRIVATE (self);
StScrollViewPrivate *priv = self->priv = st_scroll_view_get_instance_private (self);
priv->hscrollbar_policy = GTK_POLICY_AUTOMATIC;
priv->vscrollbar_policy = GTK_POLICY_AUTOMATIC;

View File

@ -32,15 +32,9 @@
G_BEGIN_DECLS
#define ST_TYPE_SCROLL_VIEW (st_scroll_view_get_type())
#define ST_SCROLL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_SCROLL_VIEW, StScrollView))
#define ST_IS_SCROLL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_SCROLL_VIEW))
#define ST_SCROLL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_SCROLL_VIEW, StScrollViewClass))
#define ST_IS_SCROLL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_SCROLL_VIEW))
#define ST_SCROLL_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_SCROLL_VIEW, StScrollViewClass))
G_DECLARE_FINAL_TYPE (StScrollView, st_scroll_view, ST, SCROLL_VIEW, StBin)
typedef struct _StScrollView StScrollView;
typedef struct _StScrollViewPrivate StScrollViewPrivate;
typedef struct _StScrollViewClass StScrollViewClass;
/**
* StScrollView:
@ -56,13 +50,6 @@ struct _StScrollView
StScrollViewPrivate *priv;
};
struct _StScrollViewClass
{
StBinClass parent_class;
};
GType st_scroll_view_get_type (void) G_GNUC_CONST;
StWidget *st_scroll_view_new (void);
ClutterActor *st_scroll_view_get_hscroll_bar (StScrollView *scroll);

View File

@ -21,6 +21,8 @@
#include "st-scrollable.h"
G_DEFINE_INTERFACE (StScrollable, st_scrollable, G_TYPE_OBJECT)
/**
* SECTION:st-scrollable
* @short_description: A #ClutterActor that can be scrolled
@ -77,7 +79,7 @@
* page_increment: page_size - step_increment
*/
static void
st_scrollable_base_init (gpointer g_iface)
st_scrollable_default_init (StScrollableInterface *g_iface)
{
static gboolean initialized = FALSE;
@ -101,32 +103,14 @@ st_scrollable_base_init (gpointer g_iface)
}
}
GType
st_scrollable_get_type (void)
{
static GType type = 0;
if (type == 0)
{
static const GTypeInfo info =
{
sizeof (StScrollableInterface),
st_scrollable_base_init, /* base_init */
NULL,
};
type = g_type_register_static (G_TYPE_INTERFACE,
"StScrollable", &info, 0);
}
return type;
}
void
st_scrollable_set_adjustments (StScrollable *scrollable,
StAdjustment *hadjustment,
StAdjustment *vadjustment)
{
ST_SCROLLABLE_GET_INTERFACE (scrollable)->set_adjustments (scrollable,
hadjustment,
vadjustment);
ST_SCROLLABLE_GET_IFACE (scrollable)->set_adjustments (scrollable,
hadjustment,
vadjustment);
}
/**
@ -142,7 +126,7 @@ st_scrollable_get_adjustments (StScrollable *scrollable,
StAdjustment **hadjustment,
StAdjustment **vadjustment)
{
ST_SCROLLABLE_GET_INTERFACE (scrollable)->get_adjustments (scrollable,
hadjustment,
vadjustment);
ST_SCROLLABLE_GET_IFACE (scrollable)->get_adjustments (scrollable,
hadjustment,
vadjustment);
}

View File

@ -31,11 +31,8 @@
G_BEGIN_DECLS
#define ST_TYPE_SCROLLABLE (st_scrollable_get_type ())
#define ST_SCROLLABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_SCROLLABLE, StScrollable))
#define ST_IS_SCROLLABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_SCROLLABLE))
#define ST_SCROLLABLE_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), ST_TYPE_SCROLLABLE, StScrollableInterface))
G_DECLARE_INTERFACE (StScrollable, st_scrollable, ST, SCROLLABLE, GObject)
typedef struct _StScrollable StScrollable; /* Dummy object */
typedef struct _StScrollableInterface StScrollableInterface;
struct _StScrollableInterface
@ -50,8 +47,6 @@ struct _StScrollableInterface
StAdjustment **vadjustment);
};
GType st_scrollable_get_type (void) G_GNUC_CONST;
void st_scrollable_set_adjustments (StScrollable *scrollable,
StAdjustment *hadjustment,
StAdjustment *vadjustment);

View File

@ -430,38 +430,30 @@ impl_load_pixbuf_file (GFile *file,
}
static void
load_pixbuf_thread (GSimpleAsyncResult *result,
GObject *object,
load_pixbuf_thread (GTask *result,
gpointer source,
gpointer task_data,
GCancellable *cancellable)
{
GdkPixbuf *pixbuf;
AsyncTextureLoadData *data;
AsyncTextureLoadData *data = task_data;
GError *error = NULL;
data = g_async_result_get_user_data (G_ASYNC_RESULT (result));
g_assert (data != NULL);
g_assert (data->file != NULL);
pixbuf = impl_load_pixbuf_file (data->file, data->width, data->height, data->scale, &error);
if (error != NULL)
{
g_simple_async_result_set_from_error (result, error);
return;
}
if (pixbuf)
g_simple_async_result_set_op_res_gpointer (result, g_object_ref (pixbuf),
g_object_unref);
g_task_return_error (result, error);
else if (pixbuf)
g_task_return_pointer (result, g_object_ref (pixbuf), g_object_unref);
}
static GdkPixbuf *
load_pixbuf_async_finish (StTextureCache *cache, GAsyncResult *result, GError **error)
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
if (g_simple_async_result_propagate_error (simple, error))
return NULL;
return g_simple_async_result_get_op_res_gpointer (simple);
return g_task_propagate_pointer (G_TASK (result), error);
}
static CoglTexture *
@ -582,10 +574,9 @@ load_texture_async (StTextureCache *cache,
{
if (data->file)
{
GSimpleAsyncResult *result;
result = g_simple_async_result_new (G_OBJECT (cache), on_pixbuf_loaded, data, load_texture_async);
g_simple_async_result_run_in_thread (result, load_pixbuf_thread, G_PRIORITY_DEFAULT, NULL);
g_object_unref (result);
GTask *task = g_task_new (cache, NULL, on_pixbuf_loaded, data);
g_task_run_in_thread (task, load_pixbuf_thread);
g_object_unref (task);
}
else if (data->icon_info)
{
@ -1024,13 +1015,13 @@ on_sliced_image_loaded (GObject *source_object,
{
GObject *cache = source_object;
AsyncImageData *data = (AsyncImageData *)user_data;
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
GTask *task = G_TASK (res);
GList *list;
if (g_simple_async_result_propagate_error (simple, NULL))
if (g_task_had_error (task))
return;
for (list = g_simple_async_result_get_op_res_gpointer (simple); list; list = g_list_next (list))
for (list = g_task_propagate_pointer (task, NULL); list; list = list->next)
{
ClutterActor *actor = load_from_pixbuf (GDK_PIXBUF (list->data));
clutter_actor_hide (actor);
@ -1065,8 +1056,9 @@ on_loader_size_prepared (GdkPixbufLoader *loader,
}
static void
load_sliced_image (GSimpleAsyncResult *result,
GObject *object,
load_sliced_image (GTask *result,
gpointer object,
gpointer task_data,
GCancellable *cancellable)
{
AsyncImageData *data;
@ -1079,7 +1071,7 @@ load_sliced_image (GSimpleAsyncResult *result,
g_assert (!cancellable);
data = g_object_get_data (G_OBJECT (result), "load_sliced_image");
data = task_data;
g_assert (data);
loader = gdk_pixbuf_loader_new ();
@ -1114,7 +1106,7 @@ load_sliced_image (GSimpleAsyncResult *result,
* though the subpixbufs will hold a reference. */
g_object_unref (loader);
g_free (buffer);
g_simple_async_result_set_op_res_gpointer (result, res, free_glist_unref_gobjects);
g_task_return_pointer (result, res, free_glist_unref_gobjects);
}
/**
@ -1144,7 +1136,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
gpointer user_data)
{
AsyncImageData *data;
GSimpleAsyncResult *result;
GTask *result;
ClutterActor *actor = clutter_actor_new ();
data = g_new0 (AsyncImageData, 1);
@ -1157,10 +1149,9 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
data->load_callback_data = user_data;
g_object_ref (G_OBJECT (actor));
result = g_simple_async_result_new (G_OBJECT (cache), on_sliced_image_loaded, data, st_texture_cache_load_sliced_image);
g_object_set_data_full (G_OBJECT (result), "load_sliced_image", data, on_data_destroy);
g_simple_async_result_run_in_thread (result, load_sliced_image, G_PRIORITY_DEFAULT, NULL);
result = g_task_new (cache, NULL, on_sliced_image_loaded, data);
g_task_set_task_data (result, data, on_data_destroy);
g_task_run_in_thread (result, load_sliced_image);
g_object_unref (result);

View File

@ -34,14 +34,8 @@
#include <st/st-theme-node.h>
#define ST_TYPE_TEXTURE_CACHE (st_texture_cache_get_type ())
#define ST_TEXTURE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_TEXTURE_CACHE, StTextureCache))
#define ST_TEXTURE_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_TEXTURE_CACHE, StTextureCacheClass))
#define ST_IS_TEXTURE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_TEXTURE_CACHE))
#define ST_IS_TEXTURE_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_TEXTURE_CACHE))
#define ST_TEXTURE_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_TEXTURE_CACHE, StTextureCacheClass))
typedef struct _StTextureCache StTextureCache;
typedef struct _StTextureCacheClass StTextureCacheClass;
G_DECLARE_FINAL_TYPE (StTextureCache, st_texture_cache,
ST, TEXTURE_CACHE, GObject)
typedef struct _StTextureCachePrivate StTextureCachePrivate;
@ -52,19 +46,11 @@ struct _StTextureCache
StTextureCachePrivate *priv;
};
struct _StTextureCacheClass
{
GObjectClass parent_class;
};
typedef enum {
ST_TEXTURE_CACHE_POLICY_NONE,
ST_TEXTURE_CACHE_POLICY_FOREVER
} StTextureCachePolicy;
GType st_texture_cache_get_type (void) G_GNUC_CONST;
StTextureCache* st_texture_cache_get_default (void);
ClutterActor *

View File

@ -38,10 +38,6 @@ struct _StThemeContext {
int scale_factor;
};
struct _StThemeContextClass {
GObjectClass parent_class;
};
#define DEFAULT_FONT "sans-serif 10"
enum

View File

@ -38,16 +38,9 @@ G_BEGIN_DECLS
* by using st_theme_context_get_for_stage().
*/
typedef struct _StThemeContextClass StThemeContextClass;
#define ST_TYPE_THEME_CONTEXT (st_theme_context_get_type ())
#define ST_THEME_CONTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ST_TYPE_THEME_CONTEXT, StThemeContext))
#define ST_THEME_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_THEME_CONTEXT, StThemeContextClass))
#define ST_IS_THEME_CONTEXT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), ST_TYPE_THEME_CONTEXT))
#define ST_IS_THEME_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_THEME_CONTEXT))
#define ST_THEME_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_THEME_CONTEXT, StThemeContextClass))
GType st_theme_context_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StThemeContext, st_theme_context,
ST, THEME_CONTEXT, GObject)
StThemeContext *st_theme_context_new (void);
StThemeContext *st_theme_context_get_for_stage (ClutterStage *stage);

View File

@ -1287,6 +1287,7 @@ st_theme_node_prerender_background (StThemeNode *node,
}
static void st_theme_node_paint_borders (StThemeNodePaintState *state,
CoglFramebuffer *framebuffer,
const ClutterActorBox *box,
guint8 paint_opacity);
@ -1299,10 +1300,10 @@ st_theme_node_invalidate_border_image (StThemeNode *node)
node->border_slices_texture = COGL_INVALID_HANDLE;
}
if (node->border_slices_material != COGL_INVALID_HANDLE)
if (node->border_slices_pipeline != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->border_slices_material);
node->border_slices_material = COGL_INVALID_HANDLE;
cogl_handle_unref (node->border_slices_pipeline);
node->border_slices_pipeline = COGL_INVALID_HANDLE;
}
}
@ -1328,7 +1329,7 @@ st_theme_node_load_border_image (StThemeNode *node)
if (node->border_slices_texture == COGL_INVALID_HANDLE)
goto out;
node->border_slices_material = _st_create_texture_pipeline (node->border_slices_texture);
node->border_slices_pipeline = _st_create_texture_pipeline (node->border_slices_texture);
}
out:
@ -1344,16 +1345,16 @@ st_theme_node_invalidate_background_image (StThemeNode *node)
node->background_texture = COGL_INVALID_HANDLE;
}
if (node->background_material != COGL_INVALID_HANDLE)
if (node->background_pipeline != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->background_material);
node->background_material = COGL_INVALID_HANDLE;
cogl_handle_unref (node->background_pipeline);
node->background_pipeline = COGL_INVALID_HANDLE;
}
if (node->background_shadow_material != COGL_INVALID_HANDLE)
if (node->background_shadow_pipeline != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->background_shadow_material);
node->background_shadow_material = COGL_INVALID_HANDLE;
cogl_handle_unref (node->background_shadow_pipeline);
node->background_shadow_pipeline = COGL_INVALID_HANDLE;
}
}
@ -1378,14 +1379,15 @@ st_theme_node_load_background_image (StThemeNode *node)
if (node->background_texture == COGL_INVALID_HANDLE)
goto out;
node->background_material = _st_create_texture_pipeline (node->background_texture);
node->background_pipeline = _st_create_texture_pipeline (node->background_texture);
if (node->background_repeat)
cogl_material_set_layer_wrap_mode (node->background_material, 0, COGL_MATERIAL_WRAP_MODE_REPEAT);
cogl_pipeline_set_layer_wrap_mode (node->background_pipeline, 0,
COGL_PIPELINE_WRAP_MODE_REPEAT);
if (background_image_shadow_spec)
{
node->background_shadow_material = _st_create_shadow_pipeline (background_image_shadow_spec,
node->background_shadow_pipeline = _st_create_shadow_pipeline (background_image_shadow_spec,
node->background_texture);
}
}
@ -1488,17 +1490,17 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
state->prerendered_texture = st_theme_node_prerender_background (node, width, height);
if (state->prerendered_texture)
state->prerendered_material = _st_create_texture_pipeline (state->prerendered_texture);
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
else
state->prerendered_material = COGL_INVALID_HANDLE;
state->prerendered_pipeline = COGL_INVALID_HANDLE;
if (box_shadow_spec && !has_inset_box_shadow)
{
if (st_theme_node_load_border_image (node))
state->box_shadow_material = _st_create_shadow_pipeline (box_shadow_spec,
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
node->border_slices_texture);
else if (state->prerendered_texture != COGL_INVALID_HANDLE)
state->box_shadow_material = _st_create_shadow_pipeline (box_shadow_spec,
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
state->prerendered_texture);
else if (node->background_color.alpha > 0 || has_border)
st_theme_node_prerender_shadow (state);
@ -1508,7 +1510,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
them. */
if (!node->cached_textures)
{
if (state->prerendered_material == COGL_INVALID_HANDLE &&
if (state->prerendered_pipeline == COGL_INVALID_HANDLE &&
width >= node->box_shadow_min_width &&
height >= node->box_shadow_min_height)
{
@ -1537,16 +1539,16 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
state->prerendered_texture = COGL_INVALID_HANDLE;
had_prerendered_texture = TRUE;
}
if (state->prerendered_material != COGL_INVALID_HANDLE)
if (state->prerendered_pipeline != COGL_INVALID_HANDLE)
{
cogl_handle_unref (state->prerendered_material);
state->prerendered_material = COGL_INVALID_HANDLE;
cogl_handle_unref (state->prerendered_pipeline);
state->prerendered_pipeline = COGL_INVALID_HANDLE;
if (node->border_slices_texture == COGL_INVALID_HANDLE &&
state->box_shadow_material != COGL_INVALID_HANDLE)
state->box_shadow_pipeline != COGL_INVALID_HANDLE)
{
cogl_handle_unref (state->box_shadow_material);
state->box_shadow_material = COGL_INVALID_HANDLE;
cogl_handle_unref (state->box_shadow_pipeline);
state->box_shadow_pipeline = COGL_INVALID_HANDLE;
had_box_shadow = TRUE;
}
}
@ -1560,7 +1562,7 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
if (had_prerendered_texture)
{
state->prerendered_texture = st_theme_node_prerender_background (node, width, height);
state->prerendered_material = _st_create_texture_pipeline (state->prerendered_texture);
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
}
else
{
@ -1573,7 +1575,7 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
}
if (had_box_shadow)
state->box_shadow_material = _st_create_shadow_pipeline (box_shadow_spec,
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
state->prerendered_texture);
}
@ -1583,20 +1585,23 @@ paint_material_with_opacity (CoglHandle material,
ClutterActorBox *coords,
guint8 paint_opacity)
{
cogl_material_set_color4ub (material,
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
cogl_pipeline_set_color4ub (material,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_set_source (material);
if (coords)
cogl_rectangle_with_texture_coords (box->x1, box->y1, box->x2, box->y2,
coords->x1, coords->y1, coords->x2, coords->y2);
cogl_framebuffer_draw_textured_rectangle (fb, material,
box->x1, box->y1, box->x2, box->y2,
coords->x1, coords->y1, coords->x2, coords->y2);
else
cogl_rectangle (box->x1, box->y1, box->x2, box->y2);
cogl_framebuffer_draw_rectangle (fb, material,
box->x1, box->y1, box->x2, box->y2);
}
static void
st_theme_node_paint_borders (StThemeNodePaintState *state,
CoglFramebuffer *framebuffer,
const ClutterActorBox *box,
guint8 paint_opacity)
{
@ -1707,32 +1712,39 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
if (state->corner_material[corner_id] == COGL_INVALID_HANDLE)
continue;
cogl_material_set_color4ub (state->corner_material[corner_id],
cogl_pipeline_set_color4ub (state->corner_material[corner_id],
paint_opacity, paint_opacity,
paint_opacity, paint_opacity);
cogl_set_source (state->corner_material[corner_id]);
switch (corner_id)
{
case ST_CORNER_TOPLEFT:
cogl_rectangle_with_texture_coords (0, 0,
max_width_radius[ST_CORNER_TOPLEFT], max_width_radius[ST_CORNER_TOPLEFT],
0, 0, 0.5, 0.5);
cogl_framebuffer_draw_textured_rectangle (framebuffer,
state->corner_material[corner_id], 0, 0,
max_width_radius[ST_CORNER_TOPLEFT], max_width_radius[ST_CORNER_TOPLEFT],
0, 0, 0.5, 0.5);
break;
case ST_CORNER_TOPRIGHT:
cogl_rectangle_with_texture_coords (width - max_width_radius[ST_CORNER_TOPRIGHT], 0,
width, max_width_radius[ST_CORNER_TOPRIGHT],
0.5, 0, 1, 0.5);
cogl_framebuffer_draw_textured_rectangle (framebuffer,
state->corner_material[corner_id],
width - max_width_radius[ST_CORNER_TOPRIGHT], 0,
width, max_width_radius[ST_CORNER_TOPRIGHT],
0.5, 0, 1, 0.5);
break;
case ST_CORNER_BOTTOMRIGHT:
cogl_rectangle_with_texture_coords (width - max_width_radius[ST_CORNER_BOTTOMRIGHT], height - max_width_radius[ST_CORNER_BOTTOMRIGHT],
width, height,
0.5, 0.5, 1, 1);
cogl_framebuffer_draw_textured_rectangle (framebuffer,
state->corner_material[corner_id],
width - max_width_radius[ST_CORNER_BOTTOMRIGHT],
height - max_width_radius[ST_CORNER_BOTTOMRIGHT],
width, height,
0.5, 0.5, 1, 1);
break;
case ST_CORNER_BOTTOMLEFT:
cogl_rectangle_with_texture_coords (0, height - max_width_radius[ST_CORNER_BOTTOMLEFT],
max_width_radius[ST_CORNER_BOTTOMLEFT], height,
0, 0.5, 0.5, 1);
cogl_framebuffer_draw_textured_rectangle (framebuffer,
state->corner_material[corner_id],
0, height - max_width_radius[ST_CORNER_BOTTOMLEFT],
max_width_radius[ST_CORNER_BOTTOMLEFT], height,
0, 0.5, 0.5, 1);
break;
default:
g_assert_not_reached();
@ -1873,6 +1885,7 @@ st_theme_node_paint_sliced_shadow (StThemeNodePaintState *state,
guint8 paint_opacity)
{
StThemeNode *node = state->node;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
guint border_radius[4];
CoglColor color;
StShadow *box_shadow_spec;
@ -1974,16 +1987,14 @@ st_theme_node_paint_sliced_shadow (StThemeNodePaintState *state,
right += xoffset;
/* Setup pipeline */
cogl_color_set_from_4ub (&color,
box_shadow_spec->color.red * paint_opacity / 255,
box_shadow_spec->color.green * paint_opacity / 255,
box_shadow_spec->color.blue * paint_opacity / 255,
box_shadow_spec->color.alpha * paint_opacity / 255);
cogl_color_init_from_4ub (&color,
box_shadow_spec->color.red * paint_opacity / 255,
box_shadow_spec->color.green * paint_opacity / 255,
box_shadow_spec->color.blue * paint_opacity / 255,
box_shadow_spec->color.alpha * paint_opacity / 255);
cogl_color_premultiply (&color);
cogl_material_set_layer_combine_constant (state->box_shadow_material, 0, &color);
cogl_set_source (state->box_shadow_material);
cogl_pipeline_set_layer_combine_constant (state->box_shadow_pipeline, 0, &color);
idx = 0;
@ -2111,7 +2122,8 @@ st_theme_node_paint_sliced_shadow (StThemeNodePaintState *state,
}
}
cogl_rectangles_with_texture_coords (rectangles, idx / 8);
cogl_framebuffer_draw_textured_rectangles (fb, state->box_shadow_pipeline,
rectangles, idx / 8);
#if 0
/* Visual feedback on shadow's 9-slice and orignal offscreen buffer,
@ -2192,24 +2204,21 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
if (buffer != COGL_INVALID_HANDLE)
offscreen = cogl_offscreen_new_to_texture (buffer);
offscreen = cogl_offscreen_new_with_texture (buffer);
if (offscreen != COGL_INVALID_HANDLE)
{
ClutterActorBox box = { 0, 0, state->box_shadow_width, state->box_shadow_height};
CoglColor clear_color;
cogl_push_framebuffer (offscreen);
cogl_ortho (0, state->box_shadow_width, state->box_shadow_height, 0, 0, 1.0);
cogl_framebuffer_orthographic (offscreen, 0, 0,
state->box_shadow_width,
state->box_shadow_height, 0, 1.0);
cogl_framebuffer_clear4f (offscreen, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 0);
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
st_theme_node_paint_borders (state, &box, 0xFF);
cogl_pop_framebuffer ();
st_theme_node_paint_borders (state, offscreen, &box, 0xFF);
cogl_handle_unref (offscreen);
state->box_shadow_material = _st_create_shadow_pipeline (st_theme_node_get_box_shadow (node),
state->box_shadow_pipeline = _st_create_shadow_pipeline (st_theme_node_get_box_shadow (node),
buffer);
}
@ -2223,12 +2232,13 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
float height,
guint8 paint_opacity)
{
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
gfloat ex, ey;
gfloat tx1, ty1, tx2, ty2;
gint border_left, border_right, border_top, border_bottom;
float img_width, img_height;
StBorderImage *border_image;
CoglHandle material;
CoglHandle pipeline;
border_image = st_theme_node_get_border_image (node);
g_assert (border_image != NULL);
@ -2252,12 +2262,10 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
if (ey < 0)
ey = border_bottom; /* FIXME ? */
material = node->border_slices_material;
cogl_material_set_color4ub (material,
pipeline = node->border_slices_pipeline;
cogl_pipeline_set_color4ub (pipeline,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_set_source (material);
{
float rectangles[] =
{
@ -2307,7 +2315,7 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
1.0, 1.0
};
cogl_rectangles_with_texture_coords (rectangles, 9);
cogl_framebuffer_draw_textured_rectangles (fb, pipeline, rectangles, 9);
}
}
@ -2410,6 +2418,7 @@ st_theme_node_needs_new_box_shadow_for_size (StThemeNodePaintState *state,
void
st_theme_node_paint (StThemeNode *node,
StThemeNodePaintState *state,
CoglFramebuffer *framebuffer,
const ClutterActorBox *box,
guint8 paint_opacity)
{
@ -2475,12 +2484,12 @@ st_theme_node_paint (StThemeNode *node,
* such that it's aligned to the outside edges)
*/
if (state->box_shadow_material)
if (state->box_shadow_pipeline)
{
if (state->alloc_width < node->box_shadow_min_width ||
state->alloc_height < node->box_shadow_min_height)
_st_paint_shadow_with_opacity (node->box_shadow,
state->box_shadow_material,
state->box_shadow_pipeline,
&allocation,
paint_opacity);
else
@ -2489,10 +2498,10 @@ st_theme_node_paint (StThemeNode *node,
paint_opacity);
}
if (state->prerendered_material != COGL_INVALID_HANDLE ||
if (state->prerendered_pipeline != COGL_INVALID_HANDLE ||
st_theme_node_load_border_image (node))
{
if (state->prerendered_material != COGL_INVALID_HANDLE)
if (state->prerendered_pipeline != COGL_INVALID_HANDLE)
{
ClutterActorBox paint_box;
@ -2500,23 +2509,23 @@ st_theme_node_paint (StThemeNode *node,
&allocation,
&paint_box);
paint_material_with_opacity (state->prerendered_material,
paint_material_with_opacity (state->prerendered_pipeline,
&paint_box,
NULL,
paint_opacity);
}
if (node->border_slices_material != COGL_INVALID_HANDLE)
if (node->border_slices_pipeline != COGL_INVALID_HANDLE)
st_theme_node_paint_sliced_border_image (node, width, height, paint_opacity);
}
else
{
st_theme_node_paint_borders (state, box, paint_opacity);
st_theme_node_paint_borders (state, framebuffer, box, paint_opacity);
}
st_theme_node_paint_outline (node, box, paint_opacity);
if (state->prerendered_material == COGL_INVALID_HANDLE &&
if (state->prerendered_pipeline == COGL_INVALID_HANDLE &&
st_theme_node_load_background_image (node))
{
ClutterActorBox background_box;
@ -2532,7 +2541,9 @@ st_theme_node_paint (StThemeNode *node,
get_background_position (node, &allocation, &background_box, &texture_coords);
if (has_visible_outline || node->background_repeat)
cogl_clip_push_rectangle (allocation.x1, allocation.y1, allocation.x2, allocation.y2);
cogl_framebuffer_push_rectangle_clip (framebuffer,
allocation.x1, allocation.y1,
allocation.x2, allocation.y2);
/* CSS based drop shadows
*
@ -2547,19 +2558,19 @@ st_theme_node_paint (StThemeNode *node,
* there is nothing (like a border, or the edge of the background color)
* to logically confine it.
*/
if (node->background_shadow_material != COGL_INVALID_HANDLE)
if (node->background_shadow_pipeline != COGL_INVALID_HANDLE)
_st_paint_shadow_with_opacity (node->background_image_shadow,
node->background_shadow_material,
node->background_shadow_pipeline,
&background_box,
paint_opacity);
paint_material_with_opacity (node->background_material,
paint_material_with_opacity (node->background_pipeline,
&background_box,
&texture_coords,
paint_opacity);
if (has_visible_outline || node->background_repeat)
cogl_clip_pop ();
cogl_framebuffer_pop_clip (framebuffer);
}
}
@ -2571,10 +2582,10 @@ st_theme_node_paint_state_node_free_internal (StThemeNodePaintState *state,
if (state->prerendered_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (state->prerendered_texture);
if (state->prerendered_material != COGL_INVALID_HANDLE)
cogl_handle_unref (state->prerendered_material);
if (state->box_shadow_material != COGL_INVALID_HANDLE)
cogl_handle_unref (state->box_shadow_material);
if (state->prerendered_pipeline != COGL_INVALID_HANDLE)
cogl_handle_unref (state->prerendered_pipeline);
if (state->box_shadow_pipeline != COGL_INVALID_HANDLE)
cogl_handle_unref (state->box_shadow_pipeline);
for (corner_id = 0; corner_id < 4; corner_id++)
if (state->corner_material[corner_id] != COGL_INVALID_HANDLE)
@ -2621,9 +2632,9 @@ st_theme_node_paint_state_init (StThemeNodePaintState *state)
state->alloc_width = 0;
state->alloc_height = 0;
state->node = NULL;
state->box_shadow_material = COGL_INVALID_HANDLE;
state->box_shadow_pipeline = COGL_INVALID_HANDLE;
state->prerendered_texture = COGL_INVALID_HANDLE;
state->prerendered_material = COGL_INVALID_HANDLE;
state->prerendered_pipeline = COGL_INVALID_HANDLE;
for (corner_id = 0; corner_id < 4; corner_id++)
state->corner_material[corner_id] = COGL_INVALID_HANDLE;
@ -2647,12 +2658,12 @@ st_theme_node_paint_state_copy (StThemeNodePaintState *state,
state->box_shadow_width = other->box_shadow_width;
state->box_shadow_height = other->box_shadow_height;
if (other->box_shadow_material)
state->box_shadow_material = cogl_handle_ref (other->box_shadow_material);
if (other->box_shadow_pipeline)
state->box_shadow_pipeline = cogl_handle_ref (other->box_shadow_pipeline);
if (other->prerendered_texture)
state->prerendered_texture = cogl_handle_ref (other->prerendered_texture);
if (other->prerendered_material)
state->prerendered_material = cogl_handle_ref (other->prerendered_material);
if (other->prerendered_pipeline)
state->prerendered_pipeline = cogl_handle_ref (other->prerendered_pipeline);
for (corner_id = 0; corner_id < 4; corner_id++)
if (other->corner_material[corner_id])
state->corner_material[corner_id] = cogl_handle_ref (other->corner_material[corner_id]);

View File

@ -107,20 +107,15 @@ struct _StThemeNode {
int box_shadow_min_width;
int box_shadow_min_height;
CoglHandle border_slices_texture;
CoglHandle border_slices_material;
CoglHandle background_texture;
CoglHandle background_material;
CoglHandle background_shadow_material;
CoglPipeline *border_slices_texture;
CoglPipeline *border_slices_pipeline;
CoglPipeline *background_texture;
CoglPipeline *background_pipeline;
CoglPipeline *background_shadow_pipeline;
StThemeNodePaintState cached_state;
};
struct _StThemeNodeClass {
GObjectClass parent_class;
};
void _st_theme_node_ensure_background (StThemeNode *node);
void _st_theme_node_ensure_geometry (StThemeNode *node);
void _st_theme_node_apply_margins (StThemeNode *node,

View File

@ -27,7 +27,13 @@ enum {
LAST_SIGNAL
};
#define ST_THEME_NODE_TRANSITION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_THEME_NODE_TRANSITION, StThemeNodeTransitionPrivate))
typedef struct _StThemeNodeTransitionPrivate StThemeNodeTransitionPrivate;
struct _StThemeNodeTransition {
GObject parent;
StThemeNodeTransitionPrivate *priv;
};
struct _StThemeNodeTransitionPrivate {
StThemeNode *old_theme_node;
@ -57,7 +63,7 @@ struct _StThemeNodeTransitionPrivate {
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (StThemeNodeTransition, st_theme_node_transition, G_TYPE_OBJECT);
G_DEFINE_TYPE_WITH_PRIVATE (StThemeNodeTransition, st_theme_node_transition, G_TYPE_OBJECT);
static void
@ -82,14 +88,12 @@ st_theme_node_transition_new (StThemeNode *from_node,
guint duration)
{
StThemeNodeTransition *transition;
g_return_val_if_fail (ST_IS_THEME_NODE (from_node), NULL);
g_return_val_if_fail (ST_IS_THEME_NODE (to_node), NULL);
duration = st_theme_node_get_transition_duration (to_node);
transition = g_object_new (ST_TYPE_THEME_NODE_TRANSITION,
NULL);
transition = g_object_new (ST_TYPE_THEME_NODE_TRANSITION, NULL);
transition->priv->old_theme_node = g_object_ref (from_node);
transition->priv->new_theme_node = g_object_ref (to_node);
@ -123,13 +127,14 @@ void
st_theme_node_transition_update (StThemeNodeTransition *transition,
StThemeNode *new_node)
{
StThemeNodeTransitionPrivate *priv = transition->priv;
StThemeNodeTransitionPrivate *priv;
StThemeNode *old_node;
ClutterTimelineDirection direction;
g_return_if_fail (ST_IS_THEME_NODE_TRANSITION (transition));
g_return_if_fail (ST_IS_THEME_NODE (new_node));
priv = transition->priv;
direction = clutter_timeline_get_direction (priv->timeline);
old_node = (direction == CLUTTER_TIMELINE_FORWARD) ? priv->old_theme_node
: priv->new_theme_node;
@ -235,7 +240,6 @@ setup_framebuffers (StThemeNodeTransition *transition,
const ClutterActorBox *allocation)
{
StThemeNodeTransitionPrivate *priv = transition->priv;
CoglColor clear_color = { 0, 0, 0, 0 };
guint width, height;
/* template material to avoid unnecessary shader compilation */
@ -264,11 +268,11 @@ setup_framebuffers (StThemeNodeTransition *transition,
if (priv->old_offscreen)
cogl_handle_unref (priv->old_offscreen);
priv->old_offscreen = cogl_offscreen_new_to_texture (priv->old_texture);
priv->old_offscreen = cogl_offscreen_new_with_texture (priv->old_texture);
if (priv->new_offscreen)
cogl_handle_unref (priv->new_offscreen);
priv->new_offscreen = cogl_offscreen_new_to_texture (priv->new_texture);
priv->new_offscreen = cogl_offscreen_new_with_texture (priv->new_texture);
g_return_val_if_fail (priv->old_offscreen != COGL_INVALID_HANDLE, FALSE);
g_return_val_if_fail (priv->new_offscreen != COGL_INVALID_HANDLE, FALSE);
@ -277,42 +281,49 @@ setup_framebuffers (StThemeNodeTransition *transition,
{
if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE))
{
material_template = cogl_material_new ();
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
material_template = cogl_pipeline_new (ctx);
cogl_material_set_layer_combine (material_template, 0,
cogl_pipeline_set_layer_combine (material_template, 0,
"RGBA = REPLACE (TEXTURE)",
NULL);
cogl_material_set_layer_combine (material_template, 1,
cogl_pipeline_set_layer_combine (material_template, 1,
"RGBA = INTERPOLATE (PREVIOUS, "
"TEXTURE, "
"CONSTANT[A])",
NULL);
cogl_material_set_layer_combine (material_template, 2,
cogl_pipeline_set_layer_combine (material_template, 2,
"RGBA = MODULATE (PREVIOUS, "
"PRIMARY)",
NULL);
}
priv->material = cogl_material_copy (material_template);
priv->material = cogl_pipeline_copy (material_template);
}
cogl_material_set_layer (priv->material, 0, priv->new_texture);
cogl_material_set_layer (priv->material, 1, priv->old_texture);
cogl_pipeline_set_layer_texture (priv->material, 0, priv->new_texture);
cogl_pipeline_set_layer_texture (priv->material, 1, priv->old_texture);
cogl_push_framebuffer (priv->old_offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_ortho (priv->offscreen_box.x1, priv->offscreen_box.x2,
priv->offscreen_box.y2, priv->offscreen_box.y1,
0.0, 1.0);
st_theme_node_paint (priv->old_theme_node, &priv->old_paint_state, allocation, 255);
cogl_pop_framebuffer ();
cogl_framebuffer_clear4f (priv->old_offscreen, COGL_BUFFER_BIT_COLOR,
0, 0, 0, 0);
cogl_framebuffer_orthographic (priv->old_offscreen,
priv->offscreen_box.x1,
priv->offscreen_box.y1,
priv->offscreen_box.x2,
priv->offscreen_box.y2, 0.0, 1.0);
cogl_push_framebuffer (priv->new_offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_ortho (priv->offscreen_box.x1, priv->offscreen_box.x2,
priv->offscreen_box.y2, priv->offscreen_box.y1,
0.0, 1.0);
st_theme_node_paint (priv->new_theme_node, &priv->new_paint_state, allocation, 255);
cogl_pop_framebuffer ();
st_theme_node_paint (priv->old_theme_node, &priv->old_paint_state,
priv->old_offscreen, allocation, 255);
cogl_framebuffer_clear4f (priv->new_offscreen, COGL_BUFFER_BIT_COLOR,
0, 0, 0, 0);
cogl_framebuffer_orthographic (priv->new_offscreen,
priv->offscreen_box.x1,
priv->offscreen_box.y1,
priv->offscreen_box.x2,
priv->offscreen_box.y2, 0.0, 1.0);
st_theme_node_paint (priv->new_theme_node, &priv->new_paint_state,
priv->new_offscreen, allocation, 255);
return TRUE;
}
@ -323,6 +334,7 @@ st_theme_node_transition_paint (StThemeNodeTransition *transition,
guint8 paint_opacity)
{
StThemeNodeTransitionPrivate *priv = transition->priv;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
CoglColor constant;
float tex_coords[] = {
@ -347,20 +359,20 @@ st_theme_node_transition_paint (StThemeNodeTransition *transition,
return;
}
cogl_color_set_from_4f (&constant, 0., 0., 0.,
clutter_timeline_get_progress (priv->timeline));
cogl_material_set_layer_combine_constant (priv->material, 1, &constant);
cogl_color_init_from_4f (&constant, 0., 0., 0.,
clutter_timeline_get_progress (priv->timeline));
cogl_pipeline_set_layer_combine_constant (priv->material, 1, &constant);
cogl_material_set_color4ub (priv->material,
cogl_pipeline_set_color4ub (priv->material,
paint_opacity, paint_opacity,
paint_opacity, paint_opacity);
cogl_set_source (priv->material);
cogl_rectangle_with_multitexture_coords (priv->offscreen_box.x1,
priv->offscreen_box.y1,
priv->offscreen_box.x2,
priv->offscreen_box.y2,
tex_coords, 8);
cogl_framebuffer_draw_multitextured_rectangle (fb, priv->material,
priv->offscreen_box.x1,
priv->offscreen_box.y1,
priv->offscreen_box.x2,
priv->offscreen_box.y2,
tex_coords, 8);
}
static void
@ -435,7 +447,7 @@ st_theme_node_transition_dispose (GObject *object)
static void
st_theme_node_transition_init (StThemeNodeTransition *transition)
{
transition->priv = ST_THEME_NODE_TRANSITION_GET_PRIVATE (transition);
transition->priv = st_theme_node_transition_get_instance_private (transition);
transition->priv->old_theme_node = NULL;
transition->priv->new_theme_node = NULL;
@ -457,23 +469,19 @@ st_theme_node_transition_class_init (StThemeNodeTransitionClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (StThemeNodeTransitionPrivate));
object_class->dispose = st_theme_node_transition_dispose;
signals[COMPLETED] =
g_signal_new ("completed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (StThemeNodeTransitionClass, completed),
NULL, NULL, NULL,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[NEW_FRAME] =
g_signal_new ("new-frame",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (StThemeNodeTransitionClass, new_frame),
NULL, NULL, NULL,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
}

View File

@ -28,31 +28,9 @@
G_BEGIN_DECLS
#define ST_TYPE_THEME_NODE_TRANSITION (st_theme_node_transition_get_type ())
#define ST_THEME_NODE_TRANSITION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ST_TYPE_THEME_NODE_TRANSITION, StThemeNodeTransition))
#define ST_IS_THEME_NODE_TRANSITION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ST_TYPE_THEME_NODE_TRANSITION))
#define ST_THEME_NODE_TRANSITION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), ST_TYPE_THEME_NODE_TRANSITION, StThemeNodeTransitionClass))
#define ST_IS_THEME_NODE_TRANSITION_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), ST_TYPE_THEME_NODE_TRANSITION))
#define ST_THEME_NODE_TRANSITION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ST_THEME_NODE_TRANSITION, StThemeNodeTransitionClass))
typedef struct _StThemeNodeTransition StThemeNodeTransition;
typedef struct _StThemeNodeTransitionClass StThemeNodeTransitionClass;
typedef struct _StThemeNodeTransitionPrivate StThemeNodeTransitionPrivate;
struct _StThemeNodeTransition {
GObject parent;
StThemeNodeTransitionPrivate *priv;
};
struct _StThemeNodeTransitionClass {
GObjectClass parent_class;
void (*completed) (StThemeNodeTransition *transition);
void (*new_frame) (StThemeNodeTransition *transition);
};
GType st_theme_node_transition_get_type (void) G_GNUC_CONST;
#define ST_TYPE_THEME_NODE_TRANSITION (st_theme_node_transition_get_type ())
G_DECLARE_FINAL_TYPE (StThemeNodeTransition, st_theme_node_transition,
ST, THEME_NODE_TRANSITION, GObject)
StThemeNodeTransition *st_theme_node_transition_new (StThemeNode *from_node,
StThemeNode *to_node,

Some files were not shown because too many files have changed in this diff Show More