мышепрозрачный xosd и osd-clock

Сбылась меча идиота - я научился делать мышепрозрачные окна (то есть все мышиные события проваливаются сквозь такое окно на то, что под ним). Оказалось, всего делов - XShapeCombineRectangles(display, window, ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted);, только фиг нагуглишь.
С учётом этого знания я пропатчил xosd, чтобы её вывод был мышепрозрачным, и с использованием этой патченной билиотеки сделал экранные цифровые часики, которые из скрипта запуска можно сделать полупрозрачными. Так что теперь у меня на экране всегда видны часы с крупными цифрами, которые не мешают:

Если это кому-то интересно - могу выложить на AUR.
Да просто вываливай патч и скрипт. Кому нужно - найдут.
Lupus pilum mutat, non mentem.
jim945
Да просто вываливай патч и скрипт. Кому нужно - найдут.
Патч - не проблема: mouse-through.patch
diff -ur /tmp/xosd/src/xosd-2.2.14/src/libxosd/xosd.c ./src/libxosd/xosd.c
--- /tmp/xosd/src/xosd-2.2.14/src/libxosd/xosd.c	2004-11-17 21:27:11.000000000 +0200
+++ ./src/libxosd/xosd.c	2015-01-04 16:15:51.000000000 +0200
@@ -369,6 +369,9 @@
       DEBUG(Dupdate, "UPD_mask");
       XShapeCombineMask(osd->display, osd->window, ShapeBounding, 0, 0,
                         osd->mask_bitmap, ShapeSet);
+      /* set the empty input shape, i.e. make the window "mouse-through" */
+      XShapeCombineRectangles(osd->display, osd->window, ShapeInput, 0, 0,
+                        NULL, 0, ShapeSet, Unsorted);
     }
 #endif
     /* Show display requested. */
@@ -1361,5 +1364,15 @@

 /* }}} */

+Window
+xosd_get_window(xosd * osd)
+{
+  FUNCTION_START(Dfunction);
+  if (osd == NULL)
+    return 0;
+
+  return osd->window;
+}
+
 /* vim: foldmethod=marker tabstop=2 shiftwidth=2 expandtab
  */
diff -ur /tmp/xosd/src/xosd-2.2.14/src/xosd.h ./src/xosd.h
--- /tmp/xosd/src/xosd-2.2.14/src/xosd.h	2004-08-20 01:39:35.000000000 +0300
+++ ./src/xosd.h	2015-01-04 16:16:08.000000000 +0200
@@ -15,6 +15,8 @@
 #endif
 #endif

+#include <X11/X.h>
+
 /* Error message when a routine returns failure */
   extern char *xosd_error;
   extern const char *osd_default_font;
@@ -356,6 +358,18 @@
 */
   int xosd_get_number_lines(xosd * osd);

+/* xosd_get_window -- Get the window id
+ *
+ * ARGUMENTS
+ *     osd      The xosd "object".
+ *
+ * RETURNS
+ *   the window id on success
+ *  0 on failure
+*/
+  Window xosd_get_window(xosd * osd);
+
+
 #ifdef __cplusplus
 };
 #endif
Но только вряд ли он кому нужен сам по себе: ведь часики - это не скрипт, а программа, использующая libosd. Плюс скрипт для того, чтобы сделать цифры полупрозрачными.
Разобрался со всеми нужными для часиков фишками, и оказалось, что "в лоб" оно получается гораздо проще, чем через тормозной xosd. Выложил на AUR: - scrdclock. Шаблон текста, позиция, шрифт и цвет конфигурируются из комстроки.
А коньки так могут?
может их подправить для этого дела?
Lupus pilum mutat, non mentem.
jim945
А коньки так могут?
может их подправить для этого дела?
Ну, прозрачность можно и из-за угла прикрутить, а вот с мышепрозрачностью дело хуже. Я не знаток использования lua в коньках, но, вроде, там можно наладить обработку кликов. То есть если просто взять и отрубить мышь, это будет ограничением функциональности коньков. Наверно, правильнее всего было бы ввести настройку mouse_through yes/no, но по этому поводу лучше обращаться к автору.
akorop
но по этому поводу лучше обращаться к автору.
ну так ни кто же не запрещает патч накатать и опробовать))
Lupus pilum mutat, non mentem.
Кому надо для себя - без проблем. Ключевой вызов - чуть выше.
akorop
Кому надо для себя - без проблем. Ключевой вызов - чуть выше.
Ну да. Тут прямо все программисты)))
Lupus pilum mutat, non mentem.
jim945
akorop
Кому надо для себя - без проблем. Ключевой вызов - чуть выше.
Ну да. Тут прямо все программисты)))
Образовалось каке-то свободное время, поглядел, что там в conky. Оказалось, там есть попытка сделать мышепрозрачность, но не настоящую, чтобы вообще не получать мышиных событий, а "активную" - клики программа получает и передаёт десктопу. Именно поэтому в openbox работают клики над окнами conky. Но другие окна, кроме десктопа, ничего не получат.
Я сделал патчик, который вводит настоящую мышепрозрачность в тех самых случаях, в каких исходно была "активная", так что дополнительных настроек не требует. Он не совсем аккуратный, поскольку не проверяет наличие иксовых дополнений, но при тех зависимостях, с которыми в Арче собрается conky, дополнения обязательно есть.
Так что выкладываю пакет в AUR conky-mt (mouse-through).
Мышепрозначность будет, если тип окна - не normal, или есть хинт undecorated.
Что касается полупрозрачности, то у меня она почем-то не работает: own_window_argb_value 128 не оказывает никакого эффекта. Но прозрачность фона при этом работает. Так что я задаю полупрозрачность "из-за угла".
Вот фрагмент моего конфига часиков в conky:
own_window yes
own_window_transparent yes
own_window_argb_visual yes
own_window_title conky_clock
own_window_type normal
own_window_hints undecorated,above,sticky,skip_taskbar,skip_pager
double_buffer yes
А прозрачность задаю так:
transset-df -n conky_clock 0.4
 
Зарегистрироваться или войдите чтобы оставить сообщение.