[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Помогите адаптировать dpatch, пожалуйста



On Sun, Dec 05, 2010 at 06:25:45PM +0000, Mikhail Ramendik wrote:
> Всем привет!
> 
> Имеется icewm версии из squeeze (1.3.7pre2). Имеется патч к более
> старому icewm, полученный из этой же рассылки.
> 
> После некоторой обработки напильником патч успешно накладывается и
> снимается вручную.

Тут надо действовать так, как описано в man dpatch-edit-patch:

$ dpatch-edit-patch patch new-cool-patch 
$ patch -p1 < some-patch-from-someone
$ edit some.c
$ exit 0

Но на самом деле все проще, так как у меня этот патч тоже обновлен и
приложен, можешь просто его скопировать. См. аттач.

Прикрепляю также пару своих патчей.

-- 
Stanislav
Index: icewm-1.3.7~pre2/src/wmclient.cc
===================================================================
--- icewm-1.3.7~pre2.orig/src/wmclient.cc	2010-08-06 13:52:58.000000000 +0400
+++ icewm-1.3.7~pre2/src/wmclient.cc	2010-08-06 13:53:28.000000000 +0400
@@ -417,12 +417,20 @@
     switch (property.atom) {
     case XA_WM_NAME:
         if (new_prop) prop.wm_name = true;
+#if defined(WMSPEC_HINTS) && defined(CONFIG_I18N)
+	// don't use WM_NAME when we have _NET_WM_NAME
+	if (!prop.net_wm_name)
+#endif
         getNameHint();
         prop.wm_name = new_prop;
         break;
 
     case XA_WM_ICON_NAME:
         if (new_prop) prop.wm_icon_name = true;
+#if defined(WMSPEC_HINTS) && defined(CONFIG_I18N)
+	// don't use WM_ICON_NAME when we have _NET_WM_ICON_NAME
+	if (!prop.net_wm_icon_name)
+#endif
         getIconNameHint();
         prop.wm_icon_name = false;
         break;
@@ -488,6 +496,14 @@
             if (getFrame())
                 getFrame()->updateNetWMStrut();
             prop.net_wm_strut = new_prop;
+        } else if (property.atom == _XA_NET_WM_NAME) {
+	    if (new_prop) prop.net_wm_name = true;
+	    getNameHint();
+	    prop.net_wm_name = new_prop;
+        } else if (property.atom == _XA_NET_WM_ICON_NAME) {
+	    if (new_prop) prop.net_wm_icon_name = true;
+	    getIconNameHint();
+	    prop.net_wm_icon_name = new_prop;
 #endif
 #ifdef WMSPEC_HINTS
         } else if (property.atom == _XA_NET_WM_ICON) {
@@ -775,12 +791,19 @@
 }
 
 void YFrameClient::getNameHint() {
+#ifdef WMSPEC_HINTS
+    if (!prop.net_wm_name)
+#endif
     if (!prop.wm_name)
         return;
 
 #ifdef CONFIG_I18N
     XTextProperty name;
-    if (XGetWMName(xapp->display(), handle(), &name))
+    if (
+#ifdef WMSPEC_HINTS
+	(prop.net_wm_name && XGetTextProperty(xapp->display(), handle(), &name, _XA_NET_WM_NAME)) ||
+#endif
+	XGetWMName(xapp->display(), handle(), &name))
 #else
     char *name;
     if (XFetchName(xapp->display(), handle(), &name))
@@ -797,12 +820,19 @@
 }
 
 void YFrameClient::getIconNameHint() {
+#ifdef WMSPEC_HINTS
+    if (!prop.net_wm_icon_name)
+#endif
     if (!prop.wm_icon_name)
         return;
 
 #ifdef CONFIG_I18N
     XTextProperty name;
-    if (XGetWMIconName(xapp->display(), handle(), &name))
+    if (
+#ifdef WMSPEC_HINTS
+	(prop.net_wm_icon_name && XGetTextProperty(xapp->display(), handle(), &name, _XA_NET_WM_ICON_NAME)) ||
+#endif
+	XGetWMIconName(xapp->display(), handle(), &name))
 #else
     char *name;
     if (XGetIconName(xapp->display(), handle(), &name))
@@ -1708,6 +1738,8 @@
             else if (a == _XA_NET_WM_STATE) HAS(prop.net_wm_state);
             else if (a == _XA_NET_WM_WINDOW_TYPE) HAS(prop.net_wm_window_type);
             else if (a == _XA_NET_WM_USER_TIME) HAS(prop.net_wm_user_time);
+            else if (a == _XA_NET_WM_NAME) HAS(prop.net_wm_name);
+            else if (a == _XA_NET_WM_ICON_NAME) HAS(prop.net_wm_icon_name);
 #endif
 #ifdef GNOME1_HINTS
             else if (a == _XA_WIN_HINTS) HAS(prop.win_hints);
Index: icewm-1.3.7~pre2/src/wmclient.h
===================================================================
--- icewm-1.3.7~pre2.orig/src/wmclient.h	2010-08-06 13:52:58.000000000 +0400
+++ icewm-1.3.7~pre2/src/wmclient.h	2010-08-06 13:53:28.000000000 +0400
@@ -228,6 +228,8 @@
         bool net_wm_state : 1; // no property notify
         bool net_wm_window_type : 1;
         bool net_wm_user_time : 1;
+        bool net_wm_name : 1;
+        bool net_wm_icon_name : 1;
 #endif
 #ifndef NO_MWM_HINTS
         bool mwm_hints : 1;
Index: icewm-1.3.7~pre2/src/yxapp.cc
===================================================================
--- icewm-1.3.7~pre2.orig/src/yxapp.cc	2010-08-06 13:52:58.000000000 +0400
+++ icewm-1.3.7~pre2/src/yxapp.cc	2010-08-06 13:58:34.000000000 +0400
@@ -91,6 +91,7 @@
 Atom _XA_NET_WM_WINDOW_TYPE_SPLASH;
 
 Atom _XA_NET_WM_NAME;
+Atom _XA_NET_WM_ICON_NAME;
 Atom _XA_NET_WM_ICON;
 Atom _XA_NET_WM_PID;
 
@@ -310,6 +311,7 @@
         { &_XA_NET_WM_WINDOW_TYPE_SPLASH, "_NET_WM_WINDOW_TYPE_SPLASH" },
 
         { &_XA_NET_WM_NAME, "_NET_WM_NAME" },
+        { &_XA_NET_WM_ICON_NAME, "_NET_WM_ICON_NAME" },
         { &_XA_NET_WM_ICON, "_NET_WM_ICON" },
         { &_XA_NET_WM_PID, "_NET_WM_PID" },
         { &_XA_NET_WM_USER_TIME, "_NET_WM_USER_TIME" },
Index: icewm-1.3.7~pre2/src/wmclient.cc
===================================================================
--- icewm-1.3.7~pre2.orig/src/wmclient.cc	2010-08-05 21:26:36.000000000 +0400
+++ icewm-1.3.7~pre2/src/wmclient.cc	2010-08-05 22:35:33.000000000 +0400
@@ -1042,20 +1042,12 @@
         unsigned char *prop;
 
         while (XGetWindowProperty(display, handle,
-                               propAtom, 0, 16384*32, False, AnyPropertyType,
+                               propAtom, (itemCount * itemSize) / 32, 1024*32, False, AnyPropertyType,
                                &r_type, &r_format, &nitems, &bytes_remain,
-                               &prop) == Success && prop && bytes_remain == 0)
+                               &prop) == Success && prop)
         {
             if (r_format == itemSize1 && nitems > 0) {
                 data = realloc(data, (itemCount + nitems) * itemSize / 8);
-
-                // access to memory beyound 256MiB causes crashes! But anyhow, size
-                // >>2MiB looks suspicious. Detect this case ASAP. However, if
-                // the usable icon is somewhere in the beginning, it's okay to
-                // return truncated data.
-                if(itemCount * itemSize / 8 >= 2097152)
-                   break;
-
                 memcpy((char *)data + itemCount * itemSize / 8, prop, nitems * itemSize / 8);
                 itemCount += nitems;
                 XFree(prop);
Index: icewm-1.3.7~pre2/src/aapm.cc
===================================================================
--- icewm-1.3.7~pre2.orig/src/aapm.cc	2010-08-05 23:12:00.000000000 +0400
+++ icewm-1.3.7~pre2/src/aapm.cc	2010-08-05 23:20:16.000000000 +0400
@@ -434,8 +434,6 @@
                         }
                     }
                     fclose(fd);
-                    if (BATcapacity_remain > BATcapacity_full && BATcapacity_design > 0)
-                        BATcapacity_full = BATcapacity_design;
                 }
 #else
 		union acpi_battery_ioctl_arg battio;
@@ -460,6 +458,9 @@
         }
         acpiBatteries[i]->present = BATpresent;
 
+        if (BATcapacity_remain > BATcapacity_full)
+                BATcapacity_remain = BATcapacity_full;
+
 #ifdef __FreeBSD__
 	close(acpifd);
 #endif
@@ -679,8 +680,6 @@
                     }
                     fclose(fd);
                 }
-                if (BATcapacity_remain > BATcapacity_full && BATcapacity_design > 0)
-                        BATcapacity_full = BATcapacity_design;
                 acpiBatteries[i]->capacity_full = BATcapacity_full;
             }
             else {
@@ -689,6 +688,9 @@
         }
         acpiBatteries[i]->present = BATpresent;
 
+        if (BATcapacity_remain > BATcapacity_full)
+                BATcapacity_remain = BATcapacity_full;
+
         // hatred: for ApmGraph
         if (BATpresent == BAT_PRESENT &&
             //did we parse the needed values successfully?

Reply to: