summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-02-23 01:00:16 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-02-23 01:00:16 +0200
commit486d2b9c14d3fe88c11c762bd070355a3fcb3e23 (patch)
tree82c6d6b9a2f00330fcd7a30177bf122bd1c05904
parenta03fcdaa3c0515979ebe615daa67c85482607582 (diff)
downloadlibwnck-wip/muktupavels/widgets.tar.gz
move widgets to separate librarywip/muktupavels/widgets
-rw-r--r--libwnck/libwnck.h5
-rw-r--r--libwnck/meson.build30
-rw-r--r--libwnck/private.h44
-rw-r--r--libwnck/screen.c53
-rw-r--r--libwnck/screen.h14
-rw-r--r--libwnck/util.c53
-rw-r--r--libwnck/widgets/libwnck-3.map6
-rw-r--r--libwnck/widgets/meson.build116
-rw-r--r--libwnck/widgets/pager-accessible-factory.c (renamed from libwnck/pager-accessible-factory.c)0
-rw-r--r--libwnck/widgets/pager-accessible-factory.h (renamed from libwnck/pager-accessible-factory.h)0
-rw-r--r--libwnck/widgets/pager-accessible.c (renamed from libwnck/pager-accessible.c)0
-rw-r--r--libwnck/widgets/pager-accessible.h (renamed from libwnck/pager-accessible.h)2
-rw-r--r--libwnck/widgets/pager.c (renamed from libwnck/pager.c)19
-rw-r--r--libwnck/widgets/pager.h (renamed from libwnck/pager.h)2
-rw-r--r--libwnck/widgets/private.h60
-rw-r--r--libwnck/widgets/selector.c (renamed from libwnck/selector.c)10
-rw-r--r--libwnck/widgets/selector.h (renamed from libwnck/selector.h)0
-rw-r--r--libwnck/widgets/tasklist.c (renamed from libwnck/tasklist.c)62
-rw-r--r--libwnck/widgets/tasklist.h (renamed from libwnck/tasklist.h)2
-rw-r--r--libwnck/widgets/test-pager.c (renamed from libwnck/test-pager.c)2
-rw-r--r--libwnck/widgets/test-selector.c (renamed from libwnck/test-selector.c)2
-rw-r--r--libwnck/widgets/test-tasklist.c (renamed from libwnck/test-tasklist.c)2
-rw-r--r--libwnck/widgets/util.c141
-rw-r--r--libwnck/widgets/window-action-menu.c (renamed from libwnck/window-action-menu.c)0
-rw-r--r--libwnck/widgets/window-action-menu.h (renamed from libwnck/window-action-menu.h)2
-rw-r--r--libwnck/widgets/wnck-image-menu-item-private.h (renamed from libwnck/wnck-image-menu-item-private.h)2
-rw-r--r--libwnck/widgets/wnck-image-menu-item.c (renamed from libwnck/wnck-image-menu-item.c)0
-rw-r--r--libwnck/widgets/wnck.css (renamed from libwnck/wnck.css)0
-rw-r--r--libwnck/widgets/wnck.gresource.xml6
-rw-r--r--libwnck/widgets/workspace-accessible-factory.c (renamed from libwnck/workspace-accessible-factory.c)0
-rw-r--r--libwnck/widgets/workspace-accessible-factory.h (renamed from libwnck/workspace-accessible-factory.h)0
-rw-r--r--libwnck/widgets/workspace-accessible.c (renamed from libwnck/workspace-accessible.c)0
-rw-r--r--libwnck/widgets/workspace-accessible.h (renamed from libwnck/workspace-accessible.h)2
-rw-r--r--libwnck/widgets/xutils.c394
-rw-r--r--libwnck/widgets/xutils.h87
-rw-r--r--libwnck/window.c10
-rw-r--r--libwnck/window.h8
-rw-r--r--libwnck/wnck-handle.c6
-rw-r--r--libwnck/wnck.gresource.xml1
-rw-r--r--libwnck/workspace.c24
-rw-r--r--libwnck/xutils.h2
41 files changed, 941 insertions, 228 deletions
diff --git a/libwnck/libwnck.h b/libwnck/libwnck.h
index 20f89f6..e9d8a80 100644
--- a/libwnck/libwnck.h
+++ b/libwnck/libwnck.h
@@ -29,11 +29,6 @@
#include <libwnck/workspace.h>
#include <libwnck/screen.h>
-#include <libwnck/pager.h>
-#include <libwnck/tasklist.h>
-#include <libwnck/selector.h>
-
-#include <libwnck/window-action-menu.h>
#include <libwnck/util.h>
#include <libwnck/version.h>
diff --git a/libwnck/meson.build b/libwnck/meson.build
index 9f714d0..bb345ef 100644
--- a/libwnck/meson.build
+++ b/libwnck/meson.build
@@ -30,15 +30,11 @@ version_data.set('WNCK_MICRO_VERSION', micro_version)
headers = [
'libwnck.h',
- 'pager.h',
'application.h',
'class-group.h',
'screen.h',
- 'selector.h',
- 'tasklist.h',
'util.h',
'window.h',
- 'window-action-menu.h',
'workspace.h',
]
@@ -50,36 +46,19 @@ headers += configure_file(
sources = [
'application.c',
'class-group.c',
- 'pager.c',
'screen.c',
- 'selector.c',
- 'tasklist.c',
'util.c',
- 'window-action-menu.c',
'window.c',
'wnck-handle-private.h',
'wnck-handle.c',
'wnck-icon-cache-private.h',
'wnck-icon-cache.c',
- 'wnck-image-menu-item-private.h',
- 'wnck-image-menu-item.c',
'wnck-resource-usage-private.h',
'wnck-resource-usage.c',
'workspace.c',
'xutils.c',
]
-a11y_sources = [
- 'pager-accessible.c',
- 'pager-accessible.h',
- 'pager-accessible-factory.c',
- 'pager-accessible-factory.h',
- 'workspace-accessible.c',
- 'workspace-accessible.h',
- 'workspace-accessible-factory.c',
- 'workspace-accessible-factory.h',
-]
-
enum_types = gnome.mkenums_simple('wnck-enum-types',
sources : headers,
install_header: true,
@@ -122,7 +101,7 @@ libwnck_dep = declare_dependency(
libwnck_lib = shared_library(LIBNAME,
dependencies: libwnck_dep,
- sources: sources + a11y_sources + enum_types + resources,
+ sources: sources + enum_types + resources,
version: '@0@.@1@.@2@'.format(LIBWNCK_SOVERSION, LIBWNCK_CURRENT, LIBWNCK_REVISION),
soversion: LIBWNCK_SOVERSION,
link_depends: mapfile,
@@ -137,7 +116,7 @@ if not introspection.disabled()
namespace: 'Wnck',
nsversion: MODULE_VERSION,
export_packages: PACKAGE_NAME,
- includes: ['GObject-2.0', 'GdkPixbuf-2.0', 'Gtk-3.0'],
+ includes: ['GObject-2.0', 'GdkPixbuf-2.0'],
extra_args: '--c-include=@0@/@0@.h'.format(meson.project_name()),
install: true
)
@@ -155,9 +134,6 @@ endif
test_progs = [
'test-wnck',
- 'test-tasklist',
- 'test-selector',
- 'test-pager',
'test-urgent',
'test-shutdown',
]
@@ -170,3 +146,5 @@ foreach prog: progs + test_progs
install: progs.contains(prog) and get_option('install_tools'),
install_dir: bindir)
endforeach
+
+subdir('widgets')
diff --git a/libwnck/private.h b/libwnck/private.h
index 3336f38..4b029bf 100644
--- a/libwnck/private.h
+++ b/libwnck/private.h
@@ -28,17 +28,11 @@
#include "workspace.h"
#include "application.h"
#include "xutils.h"
-#include "pager.h"
#include "util.h"
#include "wnck-handle-private.h"
-#ifdef HAVE_STARTUP_NOTIFICATION
-#include <libsn/sn.h>
-#endif
G_BEGIN_DECLS
-#define WNCK_ACTIVATE_TIMEOUT 1
-
WnckHandle *_wnck_get_handle (void);
WnckClientType _wnck_get_client_type (void);
@@ -62,13 +56,12 @@ void _wnck_window_destroy (WnckWindow *window);
void _wnck_window_load_icons (WnckWindow *window);
-char* _wnck_window_get_name_for_display (WnckWindow *window,
- gboolean use_icon_name,
- gboolean use_state_decorations);
-const char* _wnck_window_get_startup_id (WnckWindow *window);
+char* wnck_window_get_name_for_display (WnckWindow *window,
+ gboolean use_icon_name,
+ gboolean use_state_decorations);
+const char* wnck_window_get_startup_id (WnckWindow *window);
time_t _wnck_window_get_needs_attention_time (WnckWindow *window);
-time_t _wnck_window_or_transient_get_needs_attention_time (WnckWindow *window);
WnckWorkspace* _wnck_workspace_create (int number,
WnckScreen *screen);
@@ -80,11 +73,6 @@ void _wnck_window_set_application (WnckWindow *window,
void _wnck_window_set_class_group (WnckWindow *window,
WnckClassGroup *class_group);
-/* this one is in pager.c since it needs code from there to draw the icon */
-void _wnck_window_set_as_drag_icon (WnckWindow *window,
- GdkDragContext *context,
- GtkWidget *drag_source);
-
void _wnck_application_add_window (WnckApplication *app,
WnckWindow *window);
void _wnck_application_remove_window (WnckApplication *app,
@@ -127,32 +115,8 @@ Window _wnck_screen_get_xroot (WnckScreen *screen);
Screen *_wnck_screen_get_xscreen (WnckScreen *screen);
GdkScreen *_wnck_screen_get_gdk_screen (WnckScreen *screen);
-#ifdef HAVE_STARTUP_NOTIFICATION
-SnDisplay* _wnck_screen_get_sn_display (WnckScreen *screen);
-#endif
-
WnckHandle *_wnck_screen_get_handle (WnckScreen *screen);
-void _wnck_pager_activate_workspace (WnckWorkspace *wspace,
- guint32 timestamp);
-int _wnck_pager_get_n_workspaces (WnckPager *pager);
-const char* _wnck_pager_get_workspace_name (WnckPager *pager,
- int i);
-WnckWorkspace* _wnck_pager_get_active_workspace (WnckPager *pager);
-WnckWorkspace* _wnck_pager_get_workspace (WnckPager *pager,
- int i);
-void _wnck_pager_get_workspace_rect (WnckPager *pager,
- int i,
- GdkRectangle *rect);
-
-void _make_gtk_label_bold (GtkLabel *label);
-void _make_gtk_label_normal (GtkLabel *label);
-
-void _wnck_selector_set_window_icon (GtkWidget *image,
- WnckWindow *window);
-
-void _wnck_ensure_fallback_style (void);
-
G_END_DECLS
#endif /* WNCK_PRIVATE_H */
diff --git a/libwnck/screen.c b/libwnck/screen.c
index 094f23e..f102943 100644
--- a/libwnck/screen.c
+++ b/libwnck/screen.c
@@ -103,14 +103,10 @@ struct _WnckScreenPrivate
guint update_handler;
-#ifdef HAVE_STARTUP_NOTIFICATION
- SnDisplay *sn_display;
-#endif
-
guint showing_desktop : 1;
guint vertical_workspaces : 1;
- _WnckLayoutCorner starting_corner;
+ WnckLayoutCorner starting_corner;
gint rows_of_workspaces;
gint columns_of_workspaces;
@@ -498,30 +494,9 @@ wnck_screen_finalize (GObject *object)
g_free (screen->priv->wm_name);
screen->priv->wm_name = NULL;
-#ifdef HAVE_STARTUP_NOTIFICATION
- sn_display_unref (screen->priv->sn_display);
- screen->priv->sn_display = NULL;
-#endif
-
G_OBJECT_CLASS (wnck_screen_parent_class)->finalize (object);
}
-#ifdef HAVE_STARTUP_NOTIFICATION
-static void
-sn_error_trap_push (SnDisplay *display,
- Display *xdisplay)
-{
- _wnck_error_trap_push (xdisplay);
-}
-
-static void
-sn_error_trap_pop (SnDisplay *display,
- Display *xdisplay)
-{
- _wnck_error_trap_pop (xdisplay);
-}
-#endif /* HAVE_STARTUP_NOTIFICATION */
-
void
_wnck_screen_construct (WnckScreen *screen,
WnckHandle *handle,
@@ -535,12 +510,6 @@ _wnck_screen_construct (WnckScreen *screen,
screen->priv->xscreen = ScreenOfDisplay (display, number);
screen->priv->number = number;
-#ifdef HAVE_STARTUP_NOTIFICATION
- screen->priv->sn_display = sn_display_new (display,
- sn_error_trap_push,
- sn_error_trap_pop);
-#endif
-
screen->priv->bg_pixmap = None;
screen->priv->orig_event_mask = _wnck_select_input (screen->priv->xscreen,
@@ -2460,11 +2429,11 @@ _wnck_screen_get_xscreen (WnckScreen *screen)
* to make it really better, use a WnckScreenLayout struct. We might also want
* to wait for deprecation of WnckWorkspaceLayout. */
void
-_wnck_screen_get_workspace_layout (WnckScreen *screen,
- _WnckLayoutOrientation *orientation,
- int *rows,
- int *columns,
- _WnckLayoutCorner *starting_corner)
+wnck_screen_get_workspace_layout (WnckScreen *screen,
+ WnckLayoutOrientation *orientation,
+ int *rows,
+ int *columns,
+ WnckLayoutCorner *starting_corner)
{
g_return_if_fail (WNCK_IS_SCREEN (screen));
@@ -2618,16 +2587,6 @@ wnck_screen_move_viewport (WnckScreen *screen,
_wnck_change_viewport (screen->priv->xscreen, x, y);
}
-#ifdef HAVE_STARTUP_NOTIFICATION
-SnDisplay*
-_wnck_screen_get_sn_display (WnckScreen *screen)
-{
- g_return_val_if_fail (WNCK_IS_SCREEN (screen), NULL);
-
- return screen->priv->sn_display;
-}
-#endif /* HAVE_STARTUP_NOTIFICATION */
-
void
_wnck_screen_change_workspace_name (WnckScreen *screen,
int number,
diff --git a/libwnck/screen.h b/libwnck/screen.h
index 3140ea5..2594220 100644
--- a/libwnck/screen.h
+++ b/libwnck/screen.h
@@ -167,7 +167,7 @@ typedef enum
{
WNCK_LAYOUT_ORIENTATION_HORIZONTAL,
WNCK_LAYOUT_ORIENTATION_VERTICAL
-} _WnckLayoutOrientation;
+} WnckLayoutOrientation;
/**
* WnckLayoutCorner:
@@ -189,7 +189,7 @@ typedef enum
WNCK_LAYOUT_CORNER_TOPRIGHT,
WNCK_LAYOUT_CORNER_BOTTOMRIGHT,
WNCK_LAYOUT_CORNER_BOTTOMLEFT
-} _WnckLayoutCorner;
+} WnckLayoutCorner;
GType wnck_screen_get_type (void) G_GNUC_CONST;
@@ -221,11 +221,11 @@ void wnck_screen_toggle_showing_desktop (WnckScreen *screen,
void wnck_screen_move_viewport (WnckScreen *screen,
int x,
int y);
-void _wnck_screen_get_workspace_layout (WnckScreen *screen,
- _WnckLayoutOrientation *orientation,
- int *rows,
- int *columns,
- _WnckLayoutCorner *starting_corner);
+void wnck_screen_get_workspace_layout (WnckScreen *screen,
+ WnckLayoutOrientation *orientation,
+ int *rows,
+ int *columns,
+ WnckLayoutCorner *starting_corner);
int wnck_screen_try_set_workspace_layout (WnckScreen *screen,
int current_token,
int rows,
diff --git a/libwnck/util.c b/libwnck/util.c
index 64f796e..aa73eac 100644
--- a/libwnck/util.c
+++ b/libwnck/util.c
@@ -29,6 +29,10 @@
#include <gdk/gdkx.h>
#include <string.h>
+#ifdef HAVE_STARTUP_NOTIFICATION
+#include <libsn/sn.h>
+#endif
+
/**
* SECTION:resource
* @short_description: reading resource usage of X clients.
@@ -235,32 +239,6 @@ _wnck_get_default_mini_icon_size (void)
return _wnck_handle_get_default_mini_icon_size (_wnck_get_handle ());
}
-/**
- * _make_gtk_label_bold:
- * @label: The label.
- *
- * Switches the font of label to a bold equivalent.
- **/
-void
-_make_gtk_label_bold (GtkLabel *label)
-{
- GtkStyleContext *context;
-
- _wnck_ensure_fallback_style ();
-
- context = gtk_widget_get_style_context (GTK_WIDGET (label));
- gtk_style_context_add_class (context, "wnck-needs-attention");
-}
-
-void
-_make_gtk_label_normal (GtkLabel *label)
-{
- GtkStyleContext *context;
-
- context = gtk_widget_get_style_context (GTK_WIDGET (label));
- gtk_style_context_remove_class (context, "wnck-needs-attention");
-}
-
#ifdef HAVE_STARTUP_NOTIFICATION
static gboolean
_wnck_util_sn_utf8_validator (const char *str,
@@ -328,26 +306,3 @@ wnck_shutdown (void)
_wnck_read_resources_shutdown_all ();
}
-
-void
-_wnck_ensure_fallback_style (void)
-{
- static gboolean css_loaded = FALSE;
- GtkCssProvider *provider;
- guint priority;
-
- if (css_loaded)
- return;
-
- provider = gtk_css_provider_new ();
- gtk_css_provider_load_from_resource (provider, "/org/gnome/libwnck/wnck.css");
-
- priority = GTK_STYLE_PROVIDER_PRIORITY_FALLBACK;
- gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
- GTK_STYLE_PROVIDER (provider),
- priority);
-
- g_object_unref (provider);
-
- css_loaded = TRUE;
-}
diff --git a/libwnck/widgets/libwnck-3.map b/libwnck/widgets/libwnck-3.map
new file mode 100644
index 0000000..7b17479
--- /dev/null
+++ b/libwnck/widgets/libwnck-3.map
@@ -0,0 +1,6 @@
+{
+global:
+ wnck_*;
+local:
+ *;
+};
diff --git a/libwnck/widgets/meson.build b/libwnck/widgets/meson.build
new file mode 100644
index 0000000..ceaa95d
--- /dev/null
+++ b/libwnck/widgets/meson.build
@@ -0,0 +1,116 @@
+gnome = import('gnome')
+
+libwnck_includedir = join_paths(PACKAGE_NAME, meson.project_name())
+
+headers = [
+ 'pager.h',
+ 'selector.h',
+ 'tasklist.h',
+ 'window-action-menu.h',
+]
+
+sources = [
+ 'pager.c',
+ 'selector.c',
+ 'tasklist.c',
+ 'util.c',
+ 'window-action-menu.c',
+ 'wnck-image-menu-item-private.h',
+ 'wnck-image-menu-item.c',
+ 'xutils.c',
+]
+
+a11y_sources = [
+ 'pager-accessible.c',
+ 'pager-accessible.h',
+ 'pager-accessible-factory.c',
+ 'pager-accessible-factory.h',
+ 'workspace-accessible.c',
+ 'workspace-accessible.h',
+ 'workspace-accessible-factory.c',
+ 'workspace-accessible-factory.h',
+]
+
+enum_types = gnome.mkenums_simple('wnck-widgets-enum-types',
+ sources : headers,
+ install_header: true,
+ install_dir: join_paths(includedir, libwnck_includedir)
+)
+
+resources = gnome.compile_resources(
+ '@0@-resources'.format(meson.project_name()),
+ 'wnck.gresource.xml',
+ source_dir: '.',
+ c_name: meson.project_name()
+)
+
+libwnck_cflags = [
+ '-DG_LOG_DOMAIN="Wnck"',
+ '-DWNCK_I_KNOW_THIS_IS_UNSTABLE',
+ '-DWNCK_LOCALEDIR="@0@"'.format(localedir),
+ '-DWNCK_COMPILATION',
+ '-DSN_API_NOT_YET_FROZEN=1'
+]
+
+mapfile = MODULE_NAME + '.map'
+libwnck_ldflags = [
+ '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile),
+]
+
+if get_option('deprecation_flags')
+ foreach domain: ['G', 'ATK', 'GDK', 'GDK_PIXBUF', 'GTK', 'WNCK']
+ libwnck_cflags += '-D@0@_DISABLE_DEPRECATED'.format(domain)
+ endforeach
+endif
+
+libwnck_widgets_dep = declare_dependency(
+ link_with: libwnck_lib,
+ include_directories: default_includes,
+ dependencies: LIBWNCK_DEPS,
+ compile_args: libwnck_cflags,
+ sources: headers + [enum_types[1]],
+ link_args: libwnck_ldflags,
+)
+
+MODULE_NAME_W = meson.project_name() + '-widgets-@0@'.format(LIBWNCK_CURRENT)
+LIBNAME_W = MODULE_NAME_W.split('lib')[1]
+
+libwnck_widgets_lib = shared_library(LIBNAME_W,
+ dependencies: libwnck_widgets_dep,
+ sources: sources + a11y_sources + enum_types + resources,
+ version: '@0@.@1@.@2@'.format(LIBWNCK_SOVERSION, LIBWNCK_CURRENT, LIBWNCK_REVISION),
+ soversion: LIBWNCK_SOVERSION,
+ link_depends: mapfile,
+ install: true,
+)
+
+introspection = get_option('introspection')
+if not introspection.disabled()
+ find_program('g-ir-scanner', required: introspection.enabled())
+ gnome.generate_gir(libwnck_widgets_lib,
+ sources: headers + sources + enum_types,
+ namespace: 'Wnck',
+ nsversion: MODULE_VERSION,
+ export_packages: PACKAGE_NAME,
+ includes: ['GObject-2.0', 'GdkPixbuf-2.0', 'Gtk-3.0'],
+ extra_args: '--c-include=@0@/@0@.h'.format(meson.project_name()),
+ install: true
+ )
+endif
+
+install_headers(headers, subdir: libwnck_includedir)
+
+test_progs = [
+ 'test-tasklist',
+ 'test-selector',
+ 'test-pager',
+]
+
+foreach prog: test_progs
+ executable(prog, [prog + '.c'],
+ include_directories: default_includes,
+ dependencies: libwnck_widgets_dep,
+ link_with: libwnck_widgets_lib,
+ install: false,
+ install_dir: bindir)
+endforeach
diff --git a/libwnck/pager-accessible-factory.c b/libwnck/widgets/pager-accessible-factory.c
index 2773f28..2773f28 100644
--- a/libwnck/pager-accessible-factory.c
+++ b/libwnck/widgets/pager-accessible-factory.c
diff --git a/libwnck/pager-accessible-factory.h b/libwnck/widgets/pager-accessible-factory.h
index 8e2fe30..8e2fe30 100644
--- a/libwnck/pager-accessible-factory.h
+++ b/libwnck/widgets/pager-accessible-factory.h
diff --git a/libwnck/pager-accessible.c b/libwnck/widgets/pager-accessible.c
index 6c4b2e8..6c4b2e8 100644
--- a/libwnck/pager-accessible.c
+++ b/libwnck/widgets/pager-accessible.c
diff --git a/libwnck/pager-accessible.h b/libwnck/widgets/pager-accessible.h
index fd3dac6..0f0909e 100644
--- a/libwnck/pager-accessible.h
+++ b/libwnck/widgets/pager-accessible.h
@@ -21,8 +21,6 @@
#include <gtk/gtk.h>
#include <atk/atk.h>
-#include "pager.h"
-#include "screen.h"
G_BEGIN_DECLS
diff --git a/libwnck/pager.c b/libwnck/widgets/pager.c
index c769d62..b0e0811 100644
--- a/libwnck/pager.c
+++ b/libwnck/widgets/pager.c
@@ -28,8 +28,6 @@
#include <glib/gi18n-lib.h>
#include "pager.h"
-#include "workspace.h"
-#include "window.h"
#include "xutils.h"
#include "pager-accessible-factory.h"
#include "workspace-accessible-factory.h"
@@ -58,6 +56,7 @@
*/
#define N_SCREEN_CONNECTIONS 11
+#define WNCK_NO_MANAGER_TOKEN 0
struct _WnckPagerPrivate
{
@@ -300,14 +299,14 @@ _wnck_pager_set_screen (WnckPager *pager)
if (!wnck_pager_set_layout_hint (pager))
{
- _WnckLayoutOrientation orientation;
+ WnckLayoutOrientation orientation;
/* we couldn't set the layout on the screen. This means someone else owns
* it. Let's at least show the correct layout. */
- _wnck_screen_get_workspace_layout (pager->priv->screen,
- &orientation,
- &pager->priv->n_rows,
- NULL, NULL);
+ wnck_screen_get_workspace_layout (pager->priv->screen,
+ &orientation,
+ &pager->priv->n_rows,
+ NULL, NULL);
/* test in this order to default to horizontal in case there was in issue
* when fetching the layout */
@@ -2857,9 +2856,13 @@ wnck_pager_get_background (WnckPager *pager,
if (p != None)
{
+ GdkDisplay *display;
Screen *xscreen;
- xscreen = WNCK_SCREEN_XSCREEN (pager->priv->screen);
+ //xscreen = WNCK_SCREEN_XSCREEN (pager->priv->screen);
+
+ display = gdk_display_get_default ();
+ xscreen = gdk_x11_screen_get_xscreen (gdk_display_get_default_screen (display));
pix = _wnck_gdk_pixbuf_get_from_pixmap (xscreen, p);
}
diff --git a/libwnck/pager.h b/libwnck/widgets/pager.h
index c67f2fa..9a92ac5 100644
--- a/libwnck/pager.h
+++ b/libwnck/widgets/pager.h
@@ -27,7 +27,7 @@
#define WNCK_PAGER_H
#include <gtk/gtk.h>
-#include <libwnck/screen.h>
+#include <libwnck/libwnck.h>
G_BEGIN_DECLS
diff --git a/libwnck/widgets/private.h b/libwnck/widgets/private.h
new file mode 100644
index 0000000..e00c819
--- /dev/null
+++ b/libwnck/widgets/private.h
@@ -0,0 +1,60 @@
+/* Private stuff */
+/* vim: set sw=2 et: */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ * Copyright (C) 2006-2007 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef WNCK_PRIVATE_H
+#define WNCK_PRIVATE_H
+
+#include <libwnck/libwnck.h>
+#include "pager.h"
+
+G_BEGIN_DECLS
+
+#define WNCK_ACTIVATE_TIMEOUT 1
+
+
+/* this one is in pager.c since it needs code from there to draw the icon */
+void _wnck_window_set_as_drag_icon (WnckWindow *window,
+ GdkDragContext *context,
+ GtkWidget *drag_source);
+
+void _make_gtk_label_bold (GtkLabel *label);
+void _make_gtk_label_normal (GtkLabel *label);
+
+void _wnck_pager_activate_workspace (WnckWorkspace *wspace,
+ guint32 timestamp);
+int _wnck_pager_get_n_workspaces (WnckPager *pager);
+const char* _wnck_pager_get_workspace_name (WnckPager *pager,
+ int i);
+WnckWorkspace* _wnck_pager_get_active_workspace (WnckPager *pager);
+WnckWorkspace* _wnck_pager_get_workspace (WnckPager *pager,
+ int i);
+void _wnck_pager_get_workspace_rect (WnckPager *pager,
+ int i,
+ GdkRectangle *rect);
+
+void _wnck_selector_set_window_icon (GtkWidget *image,
+ WnckWindow *window);
+
+void _wnck_ensure_fallback_style (void);
+
+G_END_DECLS
+
+#endif /* WNCK_PRIVATE_H */
diff --git a/libwnck/selector.c b/libwnck/widgets/selector.c
index b975b27..708b7ae 100644
--- a/libwnck/selector.c
+++ b/libwnck/widgets/selector.c
@@ -28,11 +28,11 @@
#include <config.h>
#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
#include <glib/gi18n-lib.h>
#include "selector.h"
-#include "libwnck.h"
-#include "screen.h"
+#include <libwnck/libwnck.h>
#include "wnck-image-menu-item-private.h"
#include "private.h"
@@ -356,7 +356,7 @@ wnck_selector_window_name_changed (WnckWindow *window,
item = g_hash_table_lookup (selector->priv->window_hash, window);
if (item != NULL)
{
- window_name = _wnck_window_get_name_for_display (window, FALSE, TRUE);
+ window_name = wnck_window_get_name_for_display (window, FALSE, TRUE);
gtk_menu_item_set_label (GTK_MENU_ITEM (item), window_name);
g_free (window_name);
}
@@ -410,7 +410,7 @@ wnck_selector_window_state_changed (WnckWindow *window,
if (changed_mask &
(WNCK_WINDOW_STATE_MINIMIZED | WNCK_WINDOW_STATE_SHADED))
{
- window_name = _wnck_window_get_name_for_display (window, FALSE, TRUE);
+ window_name = wnck_window_get_name_for_display (window, FALSE, TRUE);
gtk_menu_item_set_label (GTK_MENU_ITEM (item), window_name);
g_free (window_name);
}
@@ -627,7 +627,7 @@ wnck_selector_create_window (WnckSelector *selector, WnckWindow *window)
GtkWidget *item;
char *name;
- name = _wnck_window_get_name_for_display (window, FALSE, TRUE);
+ name = wnck_window_get_name_for_display (window, FALSE, TRUE);
item = wnck_selector_item_new (selector, name, window);
g_free (name);
diff --git a/libwnck/selector.h b/libwnck/widgets/selector.h
index 4783162..4783162 100644
--- a/libwnck/selector.h
+++ b/libwnck/widgets/selector.h
diff --git a/libwnck/tasklist.c b/libwnck/widgets/tasklist.c
index 8791b10..885cab5 100644
--- a/libwnck/tasklist.c
+++ b/libwnck/widgets/tasklist.c
@@ -28,14 +28,15 @@
#include <stdio.h>
#include <glib/gi18n-lib.h>
#include "tasklist.h"
-#include "window.h"
-#include "class-group.h"
#include "window-action-menu.h"
#include "wnck-image-menu-item-private.h"
-#include "workspace.h"
#include "xutils.h"
#include "private.h"
+#ifdef HAVE_STARTUP_NOTIFICATION
+#include <libsn/sn.h>
+#endif
+
/**
* SECTION:tasklist
* @short_description: a tasklist widget, showing the list of windows as a list
@@ -92,7 +93,7 @@ typedef struct _WnckTaskClass WnckTaskClass;
#define DEFAULT_GROUPING_LIMIT 80
-#define MINI_ICON_SIZE _wnck_get_default_mini_icon_size ()
+#define MINI_ICON_SIZE 16 /*_wnck_get_default_mini_icon_size ()*/
#define TASKLIST_BUTTON_PADDING 4
#define TASKLIST_TEXT_MAX_WIDTH 25 /* maximum width in characters */
@@ -229,6 +230,10 @@ struct _WnckTasklistPrivate
GDestroyNotify free_icon_loader_data;
#ifdef HAVE_STARTUP_NOTIFICATION
+ SnDisplay *sn_display;
+#endif
+
+#ifdef HAVE_STARTUP_NOTIFICATION
SnMonitorContext *sn_context;
guint startup_sequence_timeout;
#endif
@@ -2137,21 +2142,45 @@ foreach_tasklist (WnckTasklist *tasklist,
wnck_tasklist_update_lists (tasklist);
}
+#ifdef HAVE_STARTUP_NOTIFICATION
+static void
+sn_error_trap_push (SnDisplay *display,
+ Display *xdisplay)
+{
+ _wnck_error_trap_push (xdisplay);
+}
+
+static void
+sn_error_trap_pop (SnDisplay *display,
+ Display *xdisplay)
+{
+ _wnck_error_trap_pop (xdisplay);
+}
+#endif /* HAVE_STARTUP_NOTIFICATION */
+
static void
wnck_tasklist_realize (GtkWidget *widget)
{
WnckTasklist *tasklist;
GdkScreen *gdkscreen;
+ GdkDisplay *gdkdisplay;
tasklist = WNCK_TASKLIST (widget);
gdkscreen = gtk_widget_get_screen (widget);
+ gdkdisplay = gdk_screen_get_display (gdkscreen);
tasklist->priv->screen = wnck_screen_get (gdk_x11_screen_get_screen_number (gdkscreen));
g_assert (tasklist->priv->screen != NULL);
#ifdef HAVE_STARTUP_NOTIFICATION
+ tasklist->priv->sn_display = sn_display_new (gdk_x11_display_get_xdisplay (gdkdisplay),
+ sn_error_trap_push,
+ sn_error_trap_pop);
+#endif
+
+#ifdef HAVE_STARTUP_NOTIFICATION
tasklist->priv->sn_context =
- sn_monitor_context_new (_wnck_screen_get_sn_display (tasklist->priv->screen),
+ sn_monitor_context_new (tasklist->priv->sn_display,
wnck_screen_get_number (tasklist->priv->screen),
wnck_tasklist_sn_event,
tasklist,
@@ -2183,6 +2212,11 @@ wnck_tasklist_unrealize (GtkWidget *widget)
tasklist->priv->sn_context = NULL;
#endif
+#ifdef HAVE_STARTUP_NOTIFICATION
+ sn_display_unref (tasklist->priv->sn_display);
+ tasklist->priv->sn_display = NULL;
+#endif
+
(* GTK_WIDGET_CLASS (wnck_tasklist_parent_class)->unrealize) (widget);
tasklist_instances = g_slist_remove (tasklist_instances, tasklist);
@@ -3485,8 +3519,8 @@ wnck_task_popup_menu (WnckTask *task,
0);
}
- gtk_menu_set_screen (GTK_MENU (menu),
- _wnck_screen_get_gdk_screen (task->tasklist->priv->screen));
+ /*gtk_menu_set_screen (GTK_MENU (menu),
+ _wnck_screen_get_gdk_screen (task->tasklist->priv->screen));*/
gtk_widget_show (menu);
gtk_menu_popup_at_widget (GTK_MENU (menu), task->button,
@@ -3550,8 +3584,8 @@ wnck_task_get_text (WnckTask *task,
g_list_length (task->windows));
case WNCK_TASK_WINDOW:
- return _wnck_window_get_name_for_display (task->window,
- icon_text, include_state);
+ return wnck_window_get_name_for_display (task->window,
+ icon_text, include_state);
break;
case WNCK_TASK_STARTUP_SEQUENCE:
@@ -3743,7 +3777,7 @@ wnck_task_get_needs_attention (WnckTask *task)
if (wnck_window_or_transient_needs_attention (win_task->window))
{
needs_attention = TRUE;
- task->start_needs_attention = MAX (task->start_needs_attention, _wnck_window_or_transient_get_needs_attention_time (win_task->window));
+ task->start_needs_attention = MAX (task->start_needs_attention, wnck_window_or_transient_get_needs_attention_time (win_task->window));
break;
}
@@ -3754,7 +3788,7 @@ wnck_task_get_needs_attention (WnckTask *task)
case WNCK_TASK_WINDOW:
needs_attention =
wnck_window_or_transient_needs_attention (task->window);
- task->start_needs_attention = _wnck_window_or_transient_get_needs_attention_time (task->window);
+ task->start_needs_attention = wnck_window_or_transient_get_needs_attention_time (task->window);
break;
case WNCK_TASK_STARTUP_SEQUENCE:
@@ -4146,8 +4180,8 @@ wnck_task_button_press_event (GtkWidget *widget,
g_object_add_weak_pointer (G_OBJECT (task->action_menu),
(void**) &task->action_menu);
- gtk_menu_set_screen (GTK_MENU (task->action_menu),
- _wnck_screen_get_gdk_screen (task->tasklist->priv->screen));
+ /*gtk_menu_set_screen (GTK_MENU (task->action_menu),
+ _wnck_screen_get_gdk_screen (task->tasklist->priv->screen));*/
gtk_widget_show (task->action_menu);
gtk_menu_popup_at_widget (GTK_MENU (task->action_menu), task->button,
@@ -4605,7 +4639,7 @@ remove_startup_sequences_for_window (WnckTasklist *tasklist,
const char *win_id;
GList *tmp;
- win_id = _wnck_window_get_startup_id (window);
+ win_id = wnck_window_get_startup_id (window);
if (win_id == NULL)
return;
diff --git a/libwnck/tasklist.h b/libwnck/widgets/tasklist.h
index 0659f9d..75c058a 100644
--- a/libwnck/tasklist.h
+++ b/libwnck/widgets/tasklist.h
@@ -27,7 +27,7 @@
#define WNCK_TASKLIST_H
#include <gtk/gtk.h>
-#include <libwnck/screen.h>
+#include <libwnck/libwnck.h>
G_BEGIN_DECLS
diff --git a/libwnck/test-pager.c b/libwnck/widgets/test-pager.c
index d60b047..03d2130 100644
--- a/libwnck/test-pager.c
+++ b/libwnck/widgets/test-pager.c
@@ -3,6 +3,8 @@
#include <libwnck/libwnck.h>
#include <gtk/gtk.h>
+#include "pager.h"
+
static int n_rows = 1;
static gboolean only_current = FALSE;
static gboolean rtl = FALSE;
diff --git a/libwnck/test-selector.c b/libwnck/widgets/test-selector.c
index fb27ea3..ba67205 100644
--- a/libwnck/test-selector.c
+++ b/libwnck/widgets/test-selector.c
@@ -3,6 +3,8 @@
#include <libwnck/libwnck.h>
#include <gtk/gtk.h>
+#include "selector.h"
+
static gboolean skip_tasklist = FALSE;
static GOptionEntry entries[] = {
diff --git a/libwnck/test-tasklist.c b/libwnck/widgets/test-tasklist.c
index 6b27f5a..9bb27ce 100644
--- a/libwnck/test-tasklist.c
+++ b/libwnck/widgets/test-tasklist.c
@@ -3,6 +3,8 @@
#include <libwnck/libwnck.h>
#include <gtk/gtk.h>
+#include "tasklist.h"
+
static gboolean display_all = FALSE;
static gboolean never_group = FALSE;
static gboolean always_group = FALSE;
diff --git a/libwnck/widgets/util.c b/libwnck/widgets/util.c
new file mode 100644
index 0000000..4af6eaf
--- /dev/null
+++ b/libwnck/widgets/util.c
@@ -0,0 +1,141 @@
+/* util header */
+/* vim: set sw=2 et: */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ * Copyright (C) 2006-2007 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <glib/gi18n-lib.h>
+#include "xutils.h"
+#include "private.h"
+#include <gdk/gdkx.h>
+#include <string.h>
+
+#ifdef HAVE_STARTUP_NOTIFICATION
+#include <libsn/sn.h>
+#endif
+
+/**
+ * SECTION:misc
+ * @short_description: other additional features.
+ * @stability: Unstable
+ *
+ * These functions are utility functions providing some additional features to
+ * libwnck users.
+ */
+
+/**
+ * SECTION:icons
+ * @short_description: icons related functions.
+ * @stability: Unstable
+ *
+ * These functions are utility functions to manage icons for #WnckWindow and
+ * #WnckApplication.
+ */
+
+/**
+ * _make_gtk_label_bold:
+ * @label: The label.
+ *
+ * Switches the font of label to a bold equivalent.
+ **/
+void
+_make_gtk_label_bold (GtkLabel *label)
+{
+ GtkStyleContext *context;
+
+ _wnck_ensure_fallback_style ();
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (label));
+ gtk_style_context_add_class (context, "wnck-needs-attention");
+}
+
+void
+_make_gtk_label_normal (GtkLabel *label)
+{
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (label));
+ gtk_style_context_remove_class (context, "wnck-needs-attention");
+}
+
+#ifdef HAVE_STARTUP_NOTIFICATION
+static gboolean
+_wnck_util_sn_utf8_validator (const char *str,
+ int max_len)
+{
+ return g_utf8_validate (str, max_len, NULL);
+}
+#endif /* HAVE_STARTUP_NOTIFICATION */
+
+void
+_wnck_init (void)
+{
+ static gboolean done = FALSE;
+
+ if (!done)
+ {
+ bindtextdomain (GETTEXT_PACKAGE, WNCK_LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+#ifdef HAVE_STARTUP_NOTIFICATION
+ sn_set_utf8_validator (_wnck_util_sn_utf8_validator);
+#endif /* HAVE_STARTUP_NOTIFICATION */
+
+ done = TRUE;
+ }
+}
+
+Display *
+_wnck_get_default_display (void)
+{
+ GdkDisplay *display = gdk_display_get_default ();
+ /* FIXME: when we fix libwnck to not use the GDK default display, we will
+ * need to fix wnckprop accordingly. */
+ if (!GDK_IS_X11_DISPLAY (display))
+ {
+ g_warning ("libwnck is designed to work in X11 only, no valid display found");
+ return NULL;
+ }
+
+ return GDK_DISPLAY_XDISPLAY (display);
+}
+
+void
+_wnck_ensure_fallback_style (void)
+{
+ static gboolean css_loaded = FALSE;
+ GtkCssProvider *provider;
+ guint priority;
+
+ if (css_loaded)
+ return;
+
+ provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_resource (provider, "/org/gnome/libwnck/wnck.css");
+
+ priority = GTK_STYLE_PROVIDER_PRIORITY_FALLBACK;
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (provider),
+ priority);
+
+ g_object_unref (provider);
+
+ css_loaded = TRUE;
+}
diff --git a/libwnck/window-action-menu.c b/libwnck/widgets/window-action-menu.c
index bbd5efe..bbd5efe 100644
--- a/libwnck/window-action-menu.c
+++ b/libwnck/widgets/window-action-menu.c
diff --git a/libwnck/window-action-menu.h b/libwnck/widgets/window-action-menu.h
index da6a33d..73847e1 100644
--- a/libwnck/window-action-menu.h
+++ b/libwnck/widgets/window-action-menu.h
@@ -26,7 +26,7 @@
#ifndef WNCK_WINDOW_ACTION_MENU_H
#define WNCK_WINDOW_ACTION_MENU_H
-#include <libwnck/window.h>
+#include <libwnck/libwnck.h>
#include <gtk/gtk.h>
G_BEGIN_DECLS
diff --git a/libwnck/wnck-image-menu-item-private.h b/libwnck/widgets/wnck-image-menu-item-private.h
index 265289d..5d33378 100644
--- a/libwnck/wnck-image-menu-item-private.h
+++ b/libwnck/widgets/wnck-image-menu-item-private.h
@@ -19,7 +19,7 @@
#define WNCK_IMAGE_MENU_ITEM_PRIVATE_H
#include <gtk/gtk.h>
-#include "window.h"
+#include <libwnck/libwnck.h>
G_BEGIN_DECLS
diff --git a/libwnck/wnck-image-menu-item.c b/libwnck/widgets/wnck-image-menu-item.c
index e8e6d87..e8e6d87 100644
--- a/libwnck/wnck-image-menu-item.c
+++ b/libwnck/widgets/wnck-image-menu-item.c
diff --git a/libwnck/wnck.css b/libwnck/widgets/wnck.css
index 9e658b1..9e658b1 100644
--- a/libwnck/wnck.css
+++ b/libwnck/widgets/wnck.css
diff --git a/libwnck/widgets/wnck.gresource.xml b/libwnck/widgets/wnck.gresource.xml
new file mode 100644
index 0000000..2bef3c5
--- /dev/null
+++ b/libwnck/widgets/wnck.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/libwnck">
+ <file>wnck.css</file>
+ </gresource>
+</gresources>
diff --git a/libwnck/workspace-accessible-factory.c b/libwnck/widgets/workspace-accessible-factory.c
index 2aabc5c..2aabc5c 100644
--- a/libwnck/workspace-accessible-factory.c
+++ b/libwnck/widgets/workspace-accessible-factory.c
diff --git a/libwnck/workspace-accessible-factory.h b/libwnck/widgets/workspace-accessible-factory.h
index d2d4a84..d2d4a84 100644
--- a/libwnck/workspace-accessible-factory.h
+++ b/libwnck/widgets/workspace-accessible-factory.h
diff --git a/libwnck/workspace-accessible.c b/libwnck/widgets/workspace-accessible.c
index 50c4f8e..50c4f8e 100644
--- a/libwnck/workspace-accessible.c
+++ b/libwnck/widgets/workspace-accessible.c
diff --git a/libwnck/workspace-accessible.h b/libwnck/widgets/workspace-accessible.h
index 51b07e4..d20cee4 100644
--- a/libwnck/workspace-accessible.h
+++ b/libwnck/widgets/workspace-accessible.h
@@ -21,8 +21,6 @@
#include <gtk/gtk.h>
#include <atk/atk.h>
-#include "workspace.h"
-#include "pager-accessible.h"
G_BEGIN_DECLS
diff --git a/libwnck/widgets/xutils.c b/libwnck/widgets/xutils.c
new file mode 100644
index 0000000..96e686c
--- /dev/null
+++ b/libwnck/widgets/xutils.c
@@ -0,0 +1,394 @@
+/* Xlib utils */
+/* vim: set sw=2 et: */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ * Copyright (C) 2005-2007 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include "xutils.h"
+#include <string.h>
+#include <stdio.h>
+#include <cairo-xlib.h>
+#if HAVE_CAIRO_XLIB_XRENDER
+#include <cairo-xlib-xrender.h>
+#endif
+#include "private.h"
+
+gboolean
+_wnck_get_window (Screen *screen,
+ Window xwindow,
+ Atom atom,
+ Window *val)
+{
+ Display *display;
+ Atom type;
+ int format;
+ gulong nitems;
+ gulong bytes_after;
+ Window *w;
+ int err, result;
+
+ display = DisplayOfScreen (screen);
+
+ *val = 0;
+
+ _wnck_error_trap_push (display);
+ type = None;
+ result = XGetWindowProperty (display,
+ xwindow,
+ atom,
+ 0, G_MAXLONG,
+ False, XA_WINDOW, &type, &format, &nitems,
+ &bytes_after, (void*)&w);
+ err = _wnck_error_trap_pop (display);
+ if (err != Success ||
+ result != Success)
+ return FALSE;
+
+ if (type != XA_WINDOW)
+ {
+ XFree (w);
+ return FALSE;
+ }
+
+ *val = *w;
+
+ XFree (w);
+
+ return TRUE;
+}
+
+gboolean
+_wnck_get_atom (Screen *screen,
+ Window xwindow,
+ Atom atom,
+ Atom *val)
+{
+ Display *display;
+ Atom type;
+ int format;
+ gulong nitems;
+ gulong bytes_after;
+ Atom *a;
+ int err, result;
+
+ display = DisplayOfScreen (screen);
+
+ *val = 0;
+
+ _wnck_error_trap_push (display);
+ type = None;
+ result = XGetWindowProperty (display,
+ xwindow,
+ atom,
+ 0, G_MAXLONG,
+ False, XA_ATOM, &type, &format, &nitems,
+ &bytes_after, (void*)&a);
+ err = _wnck_error_trap_pop (display);
+ if (err != Success ||
+ result != Success)
+ return FALSE;
+
+ if (type != XA_ATOM)
+ {
+ XFree (a);
+ return FALSE;
+ }
+
+ *val = *a;
+
+ XFree (a);
+
+ return TRUE;
+}
+
+void
+_wnck_error_trap_push (Display *display)
+{
+ GdkDisplay *gdk_display;
+
+ gdk_display = gdk_x11_lookup_xdisplay (display);
+ g_assert (gdk_display != NULL);
+
+ gdk_x11_display_error_trap_push (gdk_display);
+}
+
+int
+_wnck_error_trap_pop (Display *display)
+{
+ GdkDisplay *gdk_display;
+
+ gdk_display = gdk_x11_lookup_xdisplay (display);
+ g_assert (gdk_display != NULL);
+
+ gdk_display_flush (gdk_display);
+ return gdk_x11_display_error_trap_pop (gdk_display);
+}
+
+cairo_surface_t *
+_wnck_cairo_surface_get_from_pixmap (Screen *screen,
+ Pixmap xpixmap)
+{
+ cairo_surface_t *surface;
+ Display *display;
+ Window root_return;
+ int x_ret, y_ret;
+ unsigned int w_ret, h_ret, bw_ret, depth_ret;
+ XWindowAttributes attrs;
+
+ surface = NULL;
+ display = DisplayOfScreen (screen);
+
+ _wnck_error_trap_push (display);
+
+ if (!XGetGeometry (display, xpixmap, &root_return,
+ &x_ret, &y_ret, &w_ret, &h_ret, &bw_ret, &depth_ret))
+ goto TRAP_POP;
+
+ if (depth_ret == 1)
+ {
+ surface = cairo_xlib_surface_create_for_bitmap (display,
+ xpixmap,
+ screen,
+ w_ret,
+ h_ret);
+ }
+ else
+ {
+ if (!XGetWindowAttributes (display, root_return, &attrs))
+ goto TRAP_POP;
+
+ if (depth_ret == (unsigned int) attrs.depth)
+ {
+ surface = cairo_xlib_surface_create (display,
+ xpixmap,
+ attrs.visual,
+ w_ret, h_ret);
+ }
+ else
+ {
+#if HAVE_CAIRO_XLIB_XRENDER
+ int std;
+
+ switch (depth_ret) {
+ case 1: std = PictStandardA1; break;
+ case 4: std = PictStandardA4; break;
+ case 8: std = PictStandardA8; break;
+ case 24: std = PictStandardRGB24; break;
+ case 32: std = PictStandardARGB32; break;
+ default: goto TRAP_POP;
+ }
+
+ surface = cairo_xlib_surface_create_with_xrender_format (display,
+ xpixmap,
+ attrs.screen,
+ XRenderFindStandardFormat (display, std),
+ w_ret, h_ret);
+#endif
+ }
+ }
+
+TRAP_POP:
+ _wnck_error_trap_pop (display);
+
+ return surface;
+}
+
+GdkPixbuf*
+_wnck_gdk_pixbuf_get_from_pixmap (Screen *screen,
+ Pixmap xpixmap)
+{
+ cairo_surface_t *surface;
+ GdkPixbuf *retval;
+
+ surface = _wnck_cairo_surface_get_from_pixmap (screen, xpixmap);
+
+ if (surface == NULL)
+ return NULL;
+
+ retval = gdk_pixbuf_get_from_surface (surface,
+ 0,
+ 0,
+ cairo_xlib_surface_get_width (surface),
+ cairo_xlib_surface_get_height (surface));
+ cairo_surface_destroy (surface);
+
+ return retval;
+}
+
+static GdkPixbuf*
+default_icon_at_size (int size)
+{
+ GdkPixbuf *base;
+
+ base = gdk_pixbuf_new_from_resource ("/org/gnome/libwnck/default_icon.png", NULL);
+
+ g_assert (base);
+
+ if (gdk_pixbuf_get_width (base) == size &&
+ gdk_pixbuf_get_height (base) == size)
+ {
+ return base;
+ }
+ else
+ {
+ GdkPixbuf *scaled;
+
+ scaled = gdk_pixbuf_scale_simple (base, size, size, GDK_INTERP_BILINEAR);
+ g_object_unref (G_OBJECT (base));
+
+ return scaled;
+ }
+}
+
+void
+_wnck_get_fallback_icons (GdkPixbuf **iconp,
+ int ideal_size,
+ GdkPixbuf **mini_iconp,
+ int ideal_mini_size)
+{
+ if (iconp)
+ *iconp = default_icon_at_size (ideal_size);
+
+ if (mini_iconp)
+ *mini_iconp = default_icon_at_size (ideal_mini_size);
+}
+
+void
+_wnck_get_window_geometry (Screen *screen,
+ Window xwindow,
+ int *xp,
+ int *yp,
+ int *widthp,
+ int *heightp)
+{
+ Display *display;
+ int x, y;
+ unsigned int width, height, bw, depth;
+ Window root_window;
+
+ width = 1;
+ height = 1;
+
+ display = DisplayOfScreen (screen);
+
+ _wnck_error_trap_push (display);
+
+ XGetGeometry (display,
+ xwindow,
+ &root_window,
+ &x, &y, &width, &height, &bw, &depth);
+
+ _wnck_error_trap_pop (display);
+
+ _wnck_get_window_position (screen, xwindow, xp, yp);
+
+ if (widthp)
+ *widthp = width;
+ if (heightp)
+ *heightp = height;
+}
+
+void
+_wnck_get_window_position (Screen *screen,
+ Window xwindow,
+ int *xp,
+ int *yp)
+{
+ Display *display;
+ Window root;
+ int x, y;
+ Window child;
+
+ x = 0;
+ y = 0;
+
+ display = DisplayOfScreen (screen);
+ root = RootWindowOfScreen (screen);
+
+ _wnck_error_trap_push (display);
+ XTranslateCoordinates (display,
+ xwindow,
+ root,
+ 0, 0,
+ &x, &y, &child);
+ _wnck_error_trap_pop (display);
+
+ if (xp)
+ *xp = x;
+ if (yp)
+ *yp = y;
+}
+
+void
+_wnck_set_icon_geometry (Screen *screen,
+ Window xwindow,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ Display *display;
+ gulong data[4];
+
+ display = DisplayOfScreen (screen);
+
+ data[0] = x;
+ data[1] = y;
+ data[2] = width;
+ data[3] = height;
+
+ _wnck_error_trap_push (display);
+
+ XChangeProperty (display,
+ xwindow,
+ _wnck_atom_get ("_NET_WM_ICON_GEOMETRY"),
+ XA_CARDINAL, 32, PropModeReplace,
+ (guchar *)&data, 4);
+
+ _wnck_error_trap_pop (display);
+}
+
+GdkDisplay*
+_wnck_gdk_display_lookup_from_display (Display *display)
+{
+ GdkDisplay *gdkdisplay = NULL;
+
+ gdkdisplay = gdk_x11_lookup_xdisplay (display);
+
+ if (!gdkdisplay)
+ g_warning ("No GdkDisplay matching Display \"%s\" was found.\n",
+ DisplayString (display));
+
+ return gdkdisplay;
+}
+
+GdkWindow*
+_wnck_gdk_window_lookup_from_window (Screen *screen,
+ Window xwindow)
+{
+ Display *display;
+ GdkDisplay *gdkdisplay;
+
+ display = DisplayOfScreen (screen);
+ gdkdisplay = _wnck_gdk_display_lookup_from_display (display);
+ if (!gdkdisplay)
+ return NULL;
+
+ return gdk_x11_window_lookup_for_display (gdkdisplay, xwindow);
+}
diff --git a/libwnck/widgets/xutils.h b/libwnck/widgets/xutils.h
new file mode 100644
index 0000000..01acaf9
--- /dev/null
+++ b/libwnck/widgets/xutils.h
@@ -0,0 +1,87 @@
+/* Xlib utilities */
+/* vim: set sw=2 et: */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ * Copyright (C) 2005-2007 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef WNCK_XUTILS_H
+#define WNCK_XUTILS_H
+
+#include <glib.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <libwnck/libwnck.h>
+
+G_BEGIN_DECLS
+
+#define WNCK_APP_WINDOW_EVENT_MASK (PropertyChangeMask | StructureNotifyMask)
+
+gboolean _wnck_get_window (Screen *screen,
+ Window xwindow,
+ Atom atom,
+ Window *val);
+gboolean _wnck_get_atom (Screen *screen,
+ Window xwindow,
+ Atom atom,
+ Atom *val);
+void _wnck_error_trap_push (Display *display);
+int _wnck_error_trap_pop (Display *display);
+
+#define _wnck_atom_get(atom_name) gdk_x11_get_xatom_by_name (atom_name)
+#define _wnck_atom_name(atom) gdk_x11_get_xatom_name (atom)
+
+void _wnck_get_fallback_icons (GdkPixbuf **iconp,
+ int ideal_size,
+ GdkPixbuf **mini_iconp,
+ int ideal_mini_size);
+
+void _wnck_get_window_geometry (Screen *screen,
+ Window xwindow,
+ int *xp,
+ int *yp,
+ int *widthp,
+ int *heightp);
+
+void _wnck_get_window_position (Screen *screen,
+ Window xwindow,
+ int *xp,
+ int *yp);
+
+void _wnck_set_icon_geometry (Screen *screen,
+ Window xwindow,
+ int x,
+ int y,
+ int width,
+ int height);
+
+cairo_surface_t *_wnck_cairo_surface_get_from_pixmap (Screen *screen,
+ Pixmap xpixmap);
+
+GdkPixbuf* _wnck_gdk_pixbuf_get_from_pixmap (Screen *screen,
+ Pixmap xpixmap);
+
+GdkDisplay* _wnck_gdk_display_lookup_from_display (Display *display);
+
+GdkWindow* _wnck_gdk_window_lookup_from_window (Screen *screen,
+ Window xwindow);
+
+G_END_DECLS
+
+#endif /* WNCK_XUTILS_H */
diff --git a/libwnck/window.c b/libwnck/window.c
index 8f6c8b7..1a487d0 100644
--- a/libwnck/window.c
+++ b/libwnck/window.c
@@ -679,9 +679,9 @@ wnck_window_get_icon_name (WnckWindow *window)
}
char *
-_wnck_window_get_name_for_display (WnckWindow *window,
- gboolean use_icon_name,
- gboolean use_state_decorations)
+wnck_window_get_name_for_display (WnckWindow *window,
+ gboolean use_icon_name,
+ gboolean use_state_decorations)
{
const char *name;
@@ -1082,7 +1082,7 @@ transient_needs_attention (WnckWindow *window)
}
time_t
-_wnck_window_or_transient_get_needs_attention_time (WnckWindow *window)
+wnck_window_or_transient_get_needs_attention_time (WnckWindow *window)
{
g_return_val_if_fail (WNCK_IS_WINDOW (window), 0);
@@ -1154,7 +1154,7 @@ wnck_window_is_maximized_vertically (WnckWindow *window)
}
const char*
-_wnck_window_get_startup_id (WnckWindow *window)
+wnck_window_get_startup_id (WnckWindow *window)
{
g_return_val_if_fail (WNCK_IS_WINDOW (window), NULL);
diff --git a/libwnck/window.h b/libwnck/window.h
index 72545aa..55693f2 100644
--- a/libwnck/window.h
+++ b/libwnck/window.h
@@ -418,6 +418,14 @@ gboolean wnck_window_is_on_workspace (WnckWindow *window,
gboolean wnck_window_is_in_viewport (WnckWindow *window,
WnckWorkspace *workspace);
+char* wnck_window_get_name_for_display (WnckWindow *window,
+ gboolean use_icon_name,
+ gboolean use_state_decorations);
+
+const char* wnck_window_get_startup_id (WnckWindow *window);
+
+time_t wnck_window_or_transient_get_needs_attention_time (WnckWindow *window);
+
G_END_DECLS
#endif /* WNCK_WINDOW_H */
diff --git a/libwnck/wnck-handle.c b/libwnck/wnck-handle.c
index 157aabe..b948a34 100644
--- a/libwnck/wnck-handle.c
+++ b/libwnck/wnck-handle.c
@@ -28,6 +28,10 @@
#include "wnck-enum-types.h"
#include "xutils.h"
+#ifdef HAVE_STARTUP_NOTIFICATION
+#include <libsn/sn.h>
+#endif
+
#define WNCK_TYPE_HANDLE (wnck_handle_get_type ())
G_DECLARE_FINAL_TYPE (WnckHandle, wnck_handle, WNCK, HANDLE, GObject)
@@ -122,6 +126,7 @@ filter_func (GdkXEvent *gdkxevent,
case ClientMessage:
#ifdef HAVE_STARTUP_NOTIFICATION
+#if 0
/* We're cheating as officially libsn requires
* us to send all events through sn_display_process_event
*/
@@ -140,6 +145,7 @@ filter_func (GdkXEvent *gdkxevent,
++i;
}
+#endif
#endif /* HAVE_STARTUP_NOTIFICATION */
break;
diff --git a/libwnck/wnck.gresource.xml b/libwnck/wnck.gresource.xml
index 2dd9737..a1eb536 100644
--- a/libwnck/wnck.gresource.xml
+++ b/libwnck/wnck.gresource.xml
@@ -2,6 +2,5 @@
<gresources>
<gresource prefix="/org/gnome/libwnck">
<file>default_icon.png</file>
- <file>wnck.css</file>
</gresource>
</gresources>
diff --git a/libwnck/workspace.c b/libwnck/workspace.c
index 4bfcd1c..1f8af96 100644
--- a/libwnck/workspace.c
+++ b/libwnck/workspace.c
@@ -424,16 +424,16 @@ wnck_workspace_is_virtual (WnckWorkspace *space)
int
wnck_workspace_get_layout_row (WnckWorkspace *space)
{
- _WnckLayoutOrientation orientation;
- _WnckLayoutCorner corner;
+ WnckLayoutOrientation orientation;
+ WnckLayoutCorner corner;
int n_rows;
int n_cols;
int row;
g_return_val_if_fail (WNCK_IS_WORKSPACE (space), -1);
- _wnck_screen_get_workspace_layout (space->priv->screen,
- &orientation, &n_rows, &n_cols, &corner);
+ wnck_screen_get_workspace_layout (space->priv->screen,
+ &orientation, &n_rows, &n_cols, &corner);
if (orientation == WNCK_LAYOUT_ORIENTATION_HORIZONTAL)
row = space->priv->number / n_cols;
@@ -464,16 +464,16 @@ wnck_workspace_get_layout_row (WnckWorkspace *space)
int
wnck_workspace_get_layout_column (WnckWorkspace *space)
{
- _WnckLayoutOrientation orientation;
- _WnckLayoutCorner corner;
+ WnckLayoutOrientation orientation;
+ WnckLayoutCorner corner;
int n_rows;
int n_cols;
int col;
g_return_val_if_fail (WNCK_IS_WORKSPACE (space), -1);
- _wnck_screen_get_workspace_layout (space->priv->screen,
- &orientation, &n_rows, &n_cols, &corner);
+ wnck_screen_get_workspace_layout (space->priv->screen,
+ &orientation, &n_rows, &n_cols, &corner);
if (orientation == WNCK_LAYOUT_ORIENTATION_HORIZONTAL)
col = space->priv->number % n_cols;
@@ -505,8 +505,8 @@ WnckWorkspace*
wnck_workspace_get_neighbor (WnckWorkspace *space,
WnckMotionDirection direction)
{
- _WnckLayoutOrientation orientation;
- _WnckLayoutCorner corner;
+ WnckLayoutOrientation orientation;
+ WnckLayoutCorner corner;
int n_rows;
int n_cols;
int row;
@@ -516,8 +516,8 @@ wnck_workspace_get_neighbor (WnckWorkspace *space,
g_return_val_if_fail (WNCK_IS_WORKSPACE (space), NULL);
- _wnck_screen_get_workspace_layout (space->priv->screen,
- &orientation, &n_rows, &n_cols, &corner);
+ wnck_screen_get_workspace_layout (space->priv->screen,
+ &orientation, &n_rows, &n_cols, &corner);
row = wnck_workspace_get_layout_row (space);
col = wnck_workspace_get_layout_column (space);
diff --git a/libwnck/xutils.h b/libwnck/xutils.h
index 4e5c620..be3f089 100644
--- a/libwnck/xutils.h
+++ b/libwnck/xutils.h
@@ -27,7 +27,7 @@
#include <X11/Xatom.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
-#include <libwnck/screen.h>
+#include <libwnck/libwnck.h>
G_BEGIN_DECLS