kdecore Library API Documentation

kipc.cpp

00001 /* This file is part of the KDE libraries 00002 00003 Copyright (C) 1999 Mattias Ettrich (ettrich@kde.org) 00004 Copyright (C) 1999,2000 Geert Jansen <jansen@kde.org> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public License 00017 along with this library; see the file COPYING.LIB. If not, write to 00018 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00019 Boston, MA 02111-1307, USA. 00020 */ 00021 00022 00023 /* 00024 * kipc.cpp: Send a message to one/all KDE apps. 00025 * 00026 * $Id: kipc.cpp,v 1.13 2003/09/03 15:33:13 schroder Exp $ 00027 */ 00028 #include "config.h" 00029 00030 #include <qwindowdefs.h> 00031 00032 #if defined Q_WS_X11 && ! defined K_WS_QTONLY 00033 #include <X11/X.h> // schroder 00034 #include <X11/Xlib.h> // schroder 00035 #include <kxerrorhandler.h> // schroder 00036 #endif 00037 00038 #include <kipc.h> 00039 00040 00041 #if defined Q_WS_X11 && ! defined K_WS_QTONLY 00042 static long getSimpleProperty(Window w, Atom a) 00043 { 00044 Atom real_type; 00045 int format; 00046 unsigned long n, extra, *p = 0, res; 00047 int status; 00048 00049 res = 0; 00050 status = XGetWindowProperty(qt_xdisplay(), w, a, 0L, 1L, False, a, 00051 &real_type, &format, &n, &extra, (unsigned char **) &p); 00052 if ((status == Success) && (n == 1) && (format == 32)) 00053 res = p[0]; 00054 if (p) XFree((char *) p); 00055 return res; 00056 } 00057 #endif 00058 00059 void KIPC::sendMessage(Message msg, WId w, int data) 00060 { 00061 #if defined Q_WS_X11 && ! defined K_WS_QTONLY 00062 static Atom a = 0; 00063 if (a == 0) 00064 a = XInternAtom(qt_xdisplay(), "KIPC_COMM_ATOM", False); 00065 XEvent ev; 00066 ev.xclient.type = ClientMessage; 00067 ev.xclient.display = qt_xdisplay(); 00068 ev.xclient.window = (Window) w; 00069 ev.xclient.message_type = a; 00070 ev.xclient.format = 32; 00071 ev.xclient.data.l[0] = msg; 00072 ev.xclient.data.l[1] = data; 00073 XSendEvent(qt_xdisplay(), (Window) w, False, 0L, &ev); 00074 00075 // KDE 1 support 00076 static Atom kde1 = 0; 00077 if ( msg == PaletteChanged || msg == FontChanged ) { 00078 if ( kde1 == 0 ) 00079 kde1 = XInternAtom(qt_xdisplay(), "KDEChangeGeneral", False ); 00080 ev.xclient.message_type = kde1; 00081 XSendEvent(qt_xdisplay(), (Window) w, False, 0L, &ev); 00082 } 00083 00084 #endif 00085 } 00086 00087 00088 void KIPC::sendMessageAll(Message msg, int data) 00089 { 00090 #if defined Q_WS_X11 && ! defined K_WS_QTONLY 00091 unsigned int i, nrootwins; 00092 Window dw1, dw2, *rootwins = 0; 00093 Display *dpy = qt_xdisplay(); 00094 int screen_count = ScreenCount(dpy); 00095 00096 KXErrorHandler handler; 00097 for (int s = 0; s < screen_count; s++) { 00098 Window root = RootWindow(dpy, s); 00099 00100 XQueryTree(dpy, root, &dw1, &dw2, &rootwins, &nrootwins); 00101 Atom a = XInternAtom(qt_xdisplay(), "KDE_DESKTOP_WINDOW", False); 00102 for (i = 0; i < nrootwins; i++) 00103 { 00104 if (getSimpleProperty(rootwins[i], a) != 0L) 00105 sendMessage(msg, rootwins[i], data); 00106 } 00107 XFree((char *) rootwins); 00108 } 00109 XSync(dpy,False); 00110 #endif 00111 } 00112
KDE Logo
This file is part of the documentation for kdecore Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Mon Aug 30 22:53:31 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003