Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 00483d81de16d6155bb71015324df6f6 > files > 15

kdebase4-workspace-4.6.5-1.3.mga1.src.rpm

--- kcontrol/colors/CMakeLists.txt.notify_color_changes	2010-02-17 19:11:31.000000000 +0100
+++ kcontrol/colors/CMakeLists.txt	2010-10-07 10:49:59.000000000 +0200
@@ -1,6 +1,6 @@
 KDE4_NO_ENABLE_FINAL(colors)
 
-set(kcm_colors_PART_SRCS ../krdb/krdb.cpp colorscm.cpp previewwidget.cpp setpreviewwidget.cpp)
+set(kcm_colors_PART_SRCS ../krdb/krdb.cpp colorscm.cpp previewwidget.cpp setpreviewwidget.cpp kipc.cpp)
 
 kde4_add_ui_files(kcm_colors_PART_SRCS colorsettings.ui preview.ui setpreview.ui)
 
--- kcontrol/colors/colorscm.cpp.notify_color_changes	2010-09-21 18:31:16.000000000 +0200
+++ kcontrol/colors/colorscm.cpp	2010-10-07 10:55:28.000000000 +0200
@@ -19,6 +19,7 @@
  */
 
 #include "colorscm.h"
+#include "kipc.h"
 
 #include "../krdb/krdb.h"
 
@@ -1234,6 +1234,9 @@
     runRdb(KRdbExportQtColors | ( applyToAlien->isChecked() ? KRdbExportColors : 0 ) );
 
     emit changed(false);
+
+    // send an event to the root window telling that the colors have changed
+    KIPC::sendMessageAll(KIPC::PaletteChanged);
 }
 
 void KColorCm::defaults()
--- kcontrol/colors/kipc.cpp.notify_color_changes	2010-10-07 10:49:59.000000000 +0200
+++ kcontrol/colors/kipc.cpp	2010-10-07 10:49:59.000000000 +0200
@@ -0,0 +1,100 @@
+/* This file is part of the KDE libraries
+
+   Copyright (C) 1999 Mattias Ettrich (ettrich@kde.org)
+   Copyright (C) 1999,2000 Geert Jansen <jansen@kde.org>
+
+   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; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+
+
+/*
+ * kipc.cpp: Send a message to one/all KDE apps.
+ *
+ * $Id: kipc.cpp 482239 2005-11-22 08:32:28Z coolo $
+ */
+#include "kipc.h"
+#include <QX11Info>
+
+#if defined Q_WS_X11
+#include <X11/X.h> 
+#include <X11/Xlib.h> 
+#endif
+
+
+
+#if defined Q_WS_X11
+static long getSimpleProperty(Window w, Atom a)
+{
+    Atom real_type;
+    int format;
+    unsigned long n, extra, res = 0;
+    int status;
+    unsigned char *p = 0;
+
+    status = XGetWindowProperty(QX11Info::display(), w, a, 0L, 1L, False, a,
+            &real_type, &format, &n, &extra, &p);
+    if ((status == Success) && (n == 1) && (format == 32))
+	res = *(unsigned long*)p;
+    if (p) XFree(p);
+    return res;
+}
+#endif
+
+void KIPC::sendMessage(Message msg, WId w, int data)
+{
+#if defined Q_WS_X11
+    static Atom a = 0;
+    if (a == 0)
+        a = XInternAtom(QX11Info::display(), "KIPC_COMM_ATOM", False);
+    XEvent ev;
+    ev.xclient.type = ClientMessage;
+    ev.xclient.display = QX11Info::display();
+    ev.xclient.window = (Window) w;
+    ev.xclient.message_type = a;
+    ev.xclient.format = 32;
+    ev.xclient.data.l[0] = msg;
+    ev.xclient.data.l[1] = data;
+    XSendEvent(QX11Info::display(), (Window) w, False, 0L, &ev);
+
+#endif
+}
+
+
+void KIPC::sendMessageAll(Message msg, int data)
+{
+#if defined Q_WS_X11
+    unsigned int i, nrootwins;
+    Window dw1, dw2, *rootwins = 0;
+    Display *dpy = QX11Info::display();
+    int screen_count = ScreenCount(dpy);
+
+    for (int s = 0; s < screen_count; s++) 
+    {
+        Window root = RootWindow(dpy, s);
+
+        XQueryTree(dpy, root, &dw1, &dw2, &rootwins, &nrootwins);
+        Atom a = XInternAtom(QX11Info::display(), "KDE_DESKTOP_WINDOW", False);
+        for (i = 0; i < nrootwins; i++)
+        {
+            if (getSimpleProperty(rootwins[i], a) != 0L)
+                sendMessage(msg, rootwins[i], data);
+        }
+        XFree((char *) rootwins);
+    }
+    XSync(dpy,False);
+#endif
+}
+
--- kcontrol/colors/kipc.h.notify_color_changes	2010-10-07 10:49:59.000000000 +0200
+++ kcontrol/colors/kipc.h	2010-10-07 10:49:59.000000000 +0200
@@ -0,0 +1,79 @@
+/* This file is part of the KDE libraries
+
+   Copyright (C) 1999 Mattias Ettrich (ettrich@kde.org)
+   Copyright (C) 1999,2000 Geert Jansen <jansen@kde.org>
+
+   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; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KIPC_h_Included__
+#define __KIPC_h_Included__
+
+/**
+ * This class implements a very simple IPC mechanism for KDE. You can send
+ * a message of a predefined type to either a specific application, or to all
+ * KDE application on the current display. The message can carry one integer of
+ * data.
+ *
+ * KIPC is mainly used in KDE for sending "Change Messages", i.e. a message to
+ * all KDE apps that a certain setting (the font, for example) has changed.
+ * For anything more complex it is recommended to use DCOP -- the Desktop
+ * Communications Protocol.
+ *
+ * Messages with id code < 32 are called "System Messages". These are
+ * directly handled by KApplication. Examples are: PaletteChanged and
+ * StyleChanged. Messages with id code >= 32 are user messages. KApplication
+ * emits the signal kipcMessage(id,arg) for each user message it receives.
+ *
+ * KIPC is implemented using X11 ClientMessage events.
+ *
+ * @see KApplication::kipcMessage()
+ * @author Geert Jansen <jansen@kde.org>
+ */
+
+#include <QWidget>
+
+class KIPC
+{
+public:
+    /**
+     * A identifier for messages. Messages below UserMessage are system
+     * messages, messages above can be defined by the user.
+     */
+    enum Message { PaletteChanged=0, FontChanged, StyleChanged,
+                   BackgroundChanged, SettingsChanged, IconChanged, ToolbarStyleChanged,
+                   ClipboardConfigChanged, /// @since 3.1
+                   BlockShortcuts, /// @since 3.5
+                   UserMessage=32 };
+
+    /**
+     * Send a message to a specific application.
+     *
+     * @param msg The message to send.
+     * @param w The window id of a toplevel window of the target application.
+     * @param data An optional integer of data.
+     */
+    static void sendMessage(Message msg, WId w, int data=0);
+
+    /**
+     * Send a message to all KDE application on the current display.
+     *
+     * @param msg The message to send.
+     * @param data An optional integer of data.
+     */
+    static void sendMessageAll(Message msg, int data=0);
+};
+#endif