Blob Blame History Raw
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;