1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
* src/clipboard.c - X clipboard hack to detect if daemon is running
*
* Elliot Lee <sopwith@redhat.com>
*
* (C) Copyright 1999 Red Hat, Inc.
*
* Licensed under the GNU GPL v2. See COPYING.
*/
#include "config.h"
#include <gconf/gconf-client.h>
#include <gdk/gdkx.h>
#include "update-notifier.h"
/*
* clipboard_get_func - dummy get_func for gtk_clipboard_set_with_data ()
*/
static void
clipboard_get_func (GtkClipboard *clipboard __attribute__((__unused__)),
GtkSelectionData *selection_data __attribute__((__unused__)),
guint info __attribute__((__unused__)),
gpointer user_data_or_owner __attribute__((__unused__)))
{
}
/*
* clipboard_clear_func - dummy clear_func for gtk_clipboard_set_with_data ()
*/
static void
clipboard_clear_func (GtkClipboard *clipboard __attribute__((__unused__)),
gpointer user_data_or_owner __attribute__((__unused__)))
{
}
/*
* up_get_clipboard - try and get the CLIPBOARD_NAME clipboard
*
* Returns TRUE if successfully retrieved and FALSE otherwise.
*/
gboolean
up_get_clipboard (void)
{
static const GtkTargetEntry targets[] = { {CLIPBOARD_NAME, 0, 0} };
gboolean retval = FALSE;
GtkClipboard *clipboard;
Atom atom;
Display *display;
atom = gdk_x11_get_xatom_by_name (CLIPBOARD_NAME);
display = gdk_x11_display_get_xdisplay (gdk_display_get_default ());
XGrabServer (display);
if (XGetSelectionOwner (display, atom) != None)
goto out;
clipboard = gtk_clipboard_get (gdk_atom_intern (CLIPBOARD_NAME, FALSE));
if (gtk_clipboard_set_with_data (clipboard, targets,
G_N_ELEMENTS (targets),
clipboard_get_func,
clipboard_clear_func, NULL))
retval = TRUE;
out:
XUngrabServer (display);
gdk_flush ();
return retval;
}
|