xutils.c Add clipboard manager files.
2005-06-03 Anders Carlsson <andersca@imendio.com> * Makefile.am: * clipboard-manager.c: * clipboard-manager.h: * list.c: * list.h: * xutils.c * xutils.h: Add clipboard manager files. * gnome-settings-daemon.c: (clipboard_manager_terminate_cb), (clipboard_manager_event_filter), (clipboard_manager_watch_cb), (finalize), (gnome_settings_daemon_new): Use clipboard manager for persistent clipboard storage.
This commit is contained in:
parent
95ea33ee84
commit
a9191cd79d
9 changed files with 1435 additions and 2 deletions
117
gnome-settings-daemon/xutils.c
Normal file
117
gnome-settings-daemon/xutils.c
Normal file
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Copyright © 2004 Red Hat, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Red Hat not be used in advertising or
|
||||
* publicity pertaining to distribution of the software without specific,
|
||||
* written prior permission. Red Hat makes no representations about the
|
||||
* suitability of this software for any purpose. It is provided "as is"
|
||||
* without express or implied warranty.
|
||||
*
|
||||
* RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
|
||||
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Author: Matthias Clasen, Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "xutils.h"
|
||||
|
||||
Atom XA_ATOM_PAIR;
|
||||
Atom XA_CLIPBOARD_MANAGER;
|
||||
Atom XA_CLIPBOARD;
|
||||
Atom XA_DELETE;
|
||||
Atom XA_INCR;
|
||||
Atom XA_INSERT_PROPERTY;
|
||||
Atom XA_INSERT_SELECTION;
|
||||
Atom XA_MANAGER;
|
||||
Atom XA_MULTIPLE;
|
||||
Atom XA_NULL;
|
||||
Atom XA_SAVE_TARGETS;
|
||||
Atom XA_TARGETS;
|
||||
Atom XA_TIMESTAMP;
|
||||
|
||||
unsigned long SELECTION_MAX_SIZE = 0;
|
||||
|
||||
|
||||
void
|
||||
init_atoms (Display *display)
|
||||
{
|
||||
unsigned long max_request_size;
|
||||
|
||||
if (SELECTION_MAX_SIZE > 0)
|
||||
return;
|
||||
|
||||
XA_ATOM_PAIR = XInternAtom (display, "ATOM_PAIR", False);
|
||||
XA_CLIPBOARD_MANAGER = XInternAtom (display, "CLIPBOARD_MANAGER", False);
|
||||
XA_CLIPBOARD = XInternAtom (display, "CLIPBOARD", False);
|
||||
XA_DELETE = XInternAtom (display, "DELETE", False);
|
||||
XA_INCR = XInternAtom (display, "INCR", False);
|
||||
XA_INSERT_PROPERTY = XInternAtom (display, "INSERT_PROPERTY", False);
|
||||
XA_INSERT_SELECTION = XInternAtom (display, "INSERT_SELECTION", False);
|
||||
XA_MANAGER = XInternAtom (display, "MANAGER", False);
|
||||
XA_MULTIPLE = XInternAtom (display, "MULTIPLE", False);
|
||||
XA_NULL = XInternAtom (display, "NULL", False);
|
||||
XA_SAVE_TARGETS = XInternAtom (display, "SAVE_TARGETS", False);
|
||||
XA_TARGETS = XInternAtom (display, "TARGETS", False);
|
||||
XA_TIMESTAMP = XInternAtom (display, "TIMESTAMP", False);
|
||||
|
||||
max_request_size = XExtendedMaxRequestSize (display);
|
||||
if (max_request_size == 0)
|
||||
max_request_size = XMaxRequestSize (display);
|
||||
|
||||
SELECTION_MAX_SIZE = max_request_size - 100;
|
||||
if (SELECTION_MAX_SIZE > 262144)
|
||||
SELECTION_MAX_SIZE = 262144;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Window window;
|
||||
Atom timestamp_prop_atom;
|
||||
} TimeStampInfo;
|
||||
|
||||
static Bool
|
||||
timestamp_predicate (Display *display,
|
||||
XEvent *xevent,
|
||||
XPointer arg)
|
||||
{
|
||||
TimeStampInfo *info = (TimeStampInfo *)arg;
|
||||
|
||||
if (xevent->type == PropertyNotify &&
|
||||
xevent->xproperty.window == info->window &&
|
||||
xevent->xproperty.atom == info->timestamp_prop_atom)
|
||||
return True;
|
||||
|
||||
return False;
|
||||
}
|
||||
|
||||
Time
|
||||
get_server_time (Display *display,
|
||||
Window window)
|
||||
{
|
||||
unsigned char c = 'a';
|
||||
XEvent xevent;
|
||||
TimeStampInfo info;
|
||||
|
||||
info.timestamp_prop_atom = XInternAtom (display, "_TIMESTAMP_PROP", False);
|
||||
info.window = window;
|
||||
|
||||
XChangeProperty (display, window,
|
||||
info.timestamp_prop_atom, info.timestamp_prop_atom,
|
||||
8, PropModeReplace, &c, 1);
|
||||
|
||||
XIfEvent (display, &xevent,
|
||||
timestamp_predicate, (XPointer)&info);
|
||||
|
||||
return xevent.xproperty.time;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue