fcitx/gnome3-tray-fix.patch
Fedora 0bd7f71746 1. Support GNOME 3 tray icon
2. Fix that main window is covered by GNOME Shell
2011-07-03 00:56:08 +08:00

367 lines
13 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff -r e9b9346cfabf -r b8f3463f19b5 ChangeLog
--- a/ChangeLog Fri Dec 17 14:06:14 2010 +0800
+++ b/ChangeLog Wed Apr 27 13:36:00 2011 +0800
@@ -1,3 +1,7 @@
+2011-04-27: CSSlayer <wengxt@gmail.com>
+ * 修复txt2mb在64位系统下的一个bug
+ * 参考Freedesktop.org WM-Spec尝试解决GNOME3窗口显示相关的问题未验证
+
2010-12-16: CSSlayer <wengxt@gmail.com>
* 增加man
* 移除pdf和odt格式的文档以后fcitx-handbook将分开发布。
diff -r e9b9346cfabf -r b8f3463f19b5 configure.in
--- a/configure.in Fri Dec 17 14:06:14 2010 +0800
+++ b/configure.in Wed Apr 27 13:36:00 2011 +0800
@@ -29,6 +29,10 @@
AC_MSG_CHECKING([host platform characteristics])
case "$host" in
+ *-*-*kfreebsd*)
+ HOST_LIBS="-ldl -lpthread"
+ md5prog=md5sum
+ ;;
*-*-*freebsd*)
HOST_LIBS="-lexecinfo -pthread"
md5prog=gmd5sum
@@ -37,6 +41,10 @@
HOST_LIBS="-ldl -lpthread"
md5prog=md5sum
;;
+ *-*-gnu*)
+ HOST_LIBS="-ldl -lpthread"
+ md5prog=md5sum
+ ;;
esac
AC_SUBST(HOST_LIBS)
diff -r e9b9346cfabf -r b8f3463f19b5 doc/man/createPYMB.1
--- a/doc/man/createPYMB.1 Fri Dec 17 14:06:14 2010 +0800
+++ b/doc/man/createPYMB.1 Wed Apr 27 13:36:00 2011 +0800
@@ -27,10 +27,10 @@
display help and exit
.TP
\fBPinyin File\fR
-Pinyin File is a file with pinyin and one character per line, seperated with space. One available file is in the source of fcitx, named \fIgbkpy.org\fR.
+Pinyin File is a file with pinyin and one character per line, separated with space. One available file is in the source of fcitx, named \fIgbkpy.org\fR.
.TP
\fBPhrase File\fR
-Phrase File is a file with full pinyin seperated with ' and the corresponding phrase. The default phrase file of fcitx can be downloaded at http://fcitx.googlecode.com/files/pinyin.tar.gz.
+Phrase File is a file with full pinyin separated with ' and the corresponding phrase. The default phrase file of fcitx can be downloaded at http://fcitx.googlecode.com/files/pinyin.tar.gz.
.TP
\fBPinyin MB File\fR
Pinyin MB File is the binary format of Pinyin File.
diff -r e9b9346cfabf -r b8f3463f19b5 src/im/special/vk.c
--- a/src/im/special/vk.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/im/special/vk.c Wed Apr 27 13:36:00 2011 +0800
@@ -271,7 +271,7 @@
return True;
}
else if (x >= 99 && x < 270) //空格
- strcpy (strKey, "\xa1\xa1");
+ strcpy (strKey, " ");
else if (x >= 312 && x <= 350) { //ESC
SwitchVK ();
pstr = (char *) NULL;
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/AboutWindow.c
--- a/src/ui/AboutWindow.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/AboutWindow.c Wed Apr 27 13:36:00 2011 +0800
@@ -41,7 +41,7 @@
char strTitle[100];
AboutWindow aboutWindow;
-extern Atom killAtom, windowTypeAtom, typeDialogAtom;
+extern Atom killAtom;
static void InitAboutWindowProperty (void);
Bool CreateAboutWindow (void)
@@ -74,18 +74,9 @@
{
XSetTransientForHint (dpy, aboutWindow.window, DefaultRootWindow (dpy));
- XChangeProperty (dpy, aboutWindow.window, windowTypeAtom, XA_ATOM, 32, PropModeReplace, (void *) &typeDialogAtom, 1);
+ SetWindowProperty(dpy, aboutWindow.window, FCITX_WINDOW_DIALOG, AboutCaption);
XSetWMProtocols (dpy, aboutWindow.window, &killAtom, 1);
-
- char *p;
-
- p = AboutCaption;
-
- XTextProperty tp;
- Xutf8TextListToTextProperty(dpy, &p, 1, XUTF8StringStyle, &tp);
- XSetWMName (dpy, aboutWindow.window, &tp);
- XFree(tp.value);
}
void DisplayAboutWindow (void)
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/InputWindow.c
--- a/src/ui/InputWindow.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/InputWindow.c Wed Apr 27 13:36:00 2011 +0800
@@ -77,7 +77,6 @@
{
XSetWindowAttributes attrib;
unsigned long attribmask;
- XTextProperty tp;
char strWindowName[]="Fcitx Input Window";
int depth;
Colormap cmap;
@@ -127,12 +126,7 @@
LoadInputMessage();
XSelectInput (dpy, inputWindow.window, ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ExposureMask);
- /* Set the name of the window */
- tp.value = (void *)strWindowName;
- tp.encoding = XA_STRING;
- tp.format = 16;
- tp.nitems = strlen(strWindowName);
- XSetWMName (dpy, inputWindow.window, &tp);
+ SetWindowProperty(dpy, inputWindow.window, FCITX_WINDOW_DOCK, strWindowName);
return True;
}
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/MainWindow.c
--- a/src/ui/MainWindow.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/MainWindow.c Wed Apr 27 13:36:00 2011 +0800
@@ -118,13 +118,7 @@
XSelectInput (dpy, mainWindow.window, ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | LeaveWindowMask);
- XTextProperty tp;
- /* Set the name of the window */
- tp.value = (void *)strWindowName;
- tp.encoding = XA_STRING;
- tp.format = 16;
- tp.nitems = strlen(strWindowName);
- XSetWMName (dpy, mainWindow.window, &tp);
+ SetWindowProperty(dpy, mainWindow.window, FCITX_WINDOW_DOCK, strWindowName);
return True;
}
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/MessageWindow.c
--- a/src/ui/MessageWindow.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/MessageWindow.c Wed Apr 27 13:36:00 2011 +0800
@@ -33,7 +33,7 @@
extern Display *dpy;
extern int iScreen;
-extern Atom killAtom, windowTypeAtom, typeDialogAtom;
+extern Atom killAtom;
MessageWindow messageWindow;
@@ -67,7 +67,7 @@
{
XSetTransientForHint (dpy, messageWindow.window, DefaultRootWindow (dpy));
- XChangeProperty (dpy, messageWindow.window, windowTypeAtom, XA_ATOM, 32, PropModeReplace, (void *) &typeDialogAtom, 1);
+ SetWindowProperty(dpy, messageWindow.window, FCITX_WINDOW_DIALOG, "Fcitx - Message");
XSetWMProtocols(dpy, messageWindow.window, &killAtom, 1);
}
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/TrayWindow.c
--- a/src/ui/TrayWindow.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/TrayWindow.c Wed Apr 27 13:36:00 2011 +0800
@@ -43,7 +43,6 @@
extern int iScreen;
Bool CreateTrayWindow() {
- XTextProperty tp;
char strWindowName[]="Fcitx Tray Window";
if ( !fc.bUseTrayIcon )
return False;
@@ -80,13 +79,6 @@
size_hints.base_height = tray.size;
XSetWMNormalHints(dpy, tray.window, &size_hints);
- //Set the name of the window
- tp.value = (void *)strWindowName;
- tp.encoding = XA_STRING;
- tp.format = 16;
- tp.nitems = strlen(strWindowName);
- XSetWMName (dpy, tray.window, &tp);
-
if (vi && vi->visual)
tray.cs = cairo_xlib_surface_create(dpy, tray.window, tray.visual.visual, 200, 200);
else
@@ -98,6 +90,8 @@
XSelectInput (dpy, tray.window, ExposureMask | KeyPressMask | \
ButtonPressMask | ButtonReleaseMask | StructureNotifyMask \
| EnterWindowMask | PointerMotionMask | LeaveWindowMask | VisibilityChangeMask);
+
+ SetWindowProperty(dpy, tray.window, FCITX_WINDOW_DOCK, strWindowName);
return True;
}
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/skin.c
--- a/src/ui/skin.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/skin.c Wed Apr 27 13:36:00 2011 +0800
@@ -600,9 +600,6 @@
void LoadInputMessage()
{
int i = 0;
- int fontSize;
-
- fontSize=sc.skinFont.fontSize;
ConfigColor cursorColor = sc.skinInputBar.cursorColor;
//输入条背景图画笔
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/ui.c
--- a/src/ui/ui.c Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/ui.c Wed Apr 27 13:36:00 2011 +0800
@@ -25,6 +25,7 @@
#include <X11/Xlocale.h>
#include <X11/Xutil.h>
+#include <X11/Xatom.h>
#include <stdio.h>
#include <stdlib.h>
@@ -72,7 +73,9 @@
Atom windowTypeAtom;
Atom typeMenuAtom;
Atom typeDialogAtom;
+Atom typeDockAtom;
Atom compManagerAtom;
+Atom pidAtom;
Window compManager;
// added by yunfan
@@ -94,9 +97,45 @@
windowTypeAtom = XInternAtom (dpy, "_NET_WM_WINDOW_TYPE", False);
typeMenuAtom = XInternAtom (dpy, "_NET_WM_WINDOW_TYPE_MENU", False);
typeDialogAtom = XInternAtom (dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
+ typeDockAtom = XInternAtom (dpy, "_NET_WM_WINDOW_TYPE_DOCK", False);
+ pidAtom = XInternAtom(dpy, "_NET_WM_PID", False);
return True;
}
+void SetWindowProperty(Display* dpy, Window window, FcitxXWindowType type, char *windowTitle)
+{
+ Atom* wintype = NULL;
+ switch(type)
+ {
+ case FCITX_WINDOW_DIALOG:
+ wintype = &typeDialogAtom;
+ break;
+ case FCITX_WINDOW_DOCK:
+ wintype = &typeDockAtom;
+ break;
+ case FCITX_WINDOW_MENU:
+ wintype = &typeMenuAtom;
+ break;
+ default:
+ wintype = NULL;
+ break;
+ }
+ if (wintype)
+ XChangeProperty (dpy, window, windowTypeAtom, XA_ATOM, 32, PropModeReplace, (void *) wintype, 1);
+
+ pid_t pid = getpid();
+ XChangeProperty(dpy, window, pidAtom, XA_CARDINAL, 32,
+ PropModeReplace, (unsigned char *)&pid, 1);
+
+ if (windowTitle)
+ {
+ XTextProperty tp;
+ Xutf8TextListToTextProperty(dpy, &windowTitle, 1, XUTF8StringStyle, &tp);
+ XSetWMName (dpy, window, &tp);
+ XFree(tp.value);
+ }
+}
+
/*
* 有关界面的消息都在这里处理
* 有关tray重画的问题此处的解决方案似乎很dirt
@@ -985,6 +1024,7 @@
pango_font_description_set_family(desc, font);
return desc;
}
+#endif
Visual * FindARGBVisual (Display *dpy, int scr)
{
@@ -1018,6 +1058,3 @@
XFree (xvi);
return visual;
}
-
-
-#endif
diff -r e9b9346cfabf -r b8f3463f19b5 src/ui/ui.h
--- a/src/ui/ui.h Fri Dec 17 14:06:14 2010 +0800
+++ b/src/ui/ui.h Wed Apr 27 13:36:00 2011 +0800
@@ -30,7 +30,15 @@
#include "core/fcitx.h"
#include "fcitx-config/fcitx-config.h"
+typedef enum FcitxXWindowType {
+ FCITX_WINDOW_UNKNOWN,
+ FCITX_WINDOW_DOCK,
+ FCITX_WINDOW_MENU,
+ FCITX_WINDOW_DIALOG
+} FcitxXWindowType;
+
Bool InitX (void);
+void SetWindowProperty(Display* dpy, Window window, FcitxXWindowType type, char *windowTitle);
void MyXEventHandler (XEvent * event);
void OutputString (cairo_t* c, const char *str, const char *font, int fontSize, int x, int y, ConfigColor* color);
diff -r e9b9346cfabf -r b8f3463f19b5 tools/txt2mb.c
--- a/tools/txt2mb.c Fri Dec 17 14:06:14 2010 +0800
+++ b/tools/txt2mb.c Wed Apr 27 13:36:00 2011 +0800
@@ -357,20 +357,20 @@
continue;
}
- bPY = False;
+ bPY = False;
+ pstr = strCode;
if (strCode[0] == cPinyinKey) {
- size_t length = strlen(strCode);
- memmove (strCode, strCode + 1, length);
+ pstr ++;
bPY = True;
}
//查找是否重复
temp = current;
if (temp != head) {
- if (strcmp (temp->strCode, strCode) >= 0) {
- while (temp != head && strcmp (temp->strCode, strCode) >= 0) {
- if (!strcmp (temp->strHZ, strHZ) && !strcmp (temp->strCode, strCode)) {
- printf ("Delete: %s %s\n", strCode, strHZ);
+ if (strcmp (temp->strCode, pstr) >= 0) {
+ while (temp != head && strcmp (temp->strCode, pstr) >= 0) {
+ if (!strcmp (temp->strHZ, strHZ) && !strcmp (temp->strCode, pstr)) {
+ printf ("Delete: %s %s\n", pstr, strHZ);
goto _next;
}
temp = temp->prev;
@@ -379,13 +379,13 @@
if (temp == head)
temp = temp->next;
- while (temp != head && strcmp (temp->strCode, strCode) <= 0)
+ while (temp != head && strcmp (temp->strCode, pstr) <= 0)
temp = temp->next;
}
else {
- while (temp != head && strcmp (temp->strCode, strCode) <= 0) {
- if (!strcmp (temp->strHZ, strHZ) && !strcmp (temp->strCode, strCode)) {
- printf ("Delete: %s %s\n", strCode, strHZ);
+ while (temp != head && strcmp (temp->strCode, pstr) <= 0) {
+ if (!strcmp (temp->strHZ, strHZ) && !strcmp (temp->strCode, pstr)) {
+ printf ("Delete: %s %s\n", pstr, strHZ);
goto _next;
}
temp = temp->next;
@@ -397,7 +397,7 @@
newRec = (RECORD *) malloc (sizeof (RECORD));
newRec->strCode = (char *) malloc (sizeof (char) * (iPYCodeLength + 1));
newRec->strHZ = (char *) malloc (sizeof (char) * strlen (strHZ) + 1);
- strcpy (newRec->strCode, strCode);
+ strcpy (newRec->strCode, pstr);
strcpy (newRec->strHZ, strHZ);
newRec->bPinyin = bPY;
newRec->iHit = 0;