> Showing urgent (flashing) windows on all desktop in LXDE’s taskbar (window list) in Lubuntu

September 25th, 2014

As it stands, lxpanel’s taskbar plugin (part of the LXDE desktop you get with Lubuntu) does not show urgent (flashing) windows if they are on a different virtual desktop from the one you are looking at.

This seems wrong to me (I logged Bug 682), and the fix is a little one-liner:

--- lxpanel.orig/src/plugins/taskbar.c  2013-08-27 23:57:55.000000000 +0100
+++ lxpanel/src/plugins/taskbar.c       2014-09-26 00:48:25.026855589 +0100
@@ -202,10 +202,10 @@
     tk->flash_timeout = g_timeout_add(interval, (GSourceFunc) flash_window_timeout, tk);
 }
 
-/* Determine if a task is visible considering only its desktop placement. */
+/* Determine if a task is visible considering only its desktop placement and urgency. */
 static gboolean task_is_visible_on_current_desktop(TaskbarPlugin * tb, Task * tk)
 {
-    return ((tk->desktop == ALL_WORKSPACES) || (tk->desktop == tb->current_desktop) || (tb->show_all_desks));
+    return ((tk->desktop == ALL_WORKSPACES) || (tk->desktop == tb->current_desktop) || (tb->show_all_desks) || tk->urgency);
 }
 
 /* Recompute the visible task for a class when the class membership changes.

To install this patch into Lubuntu, do something like this:

sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep lxpanel
mkdir lxpanel
cd lxpanel
apt-get source lxpanel
cd lxpanel-*
wget https://sourceforge.net/p/lxde/bugs/682/attachment/show-urgent-windows-on-all-desktops.patch
patch -p1 < show-urgent-windows-on-all-desktops.patch
dpkg-buildpackage -rfakeroot -b
cd ..
sudo dpkg -i lxpanel_*.deb
killall lxpanel
lxpanel --profile Lubuntu

> Launch an urgent window using Python and Xlib with the UrgencyHint flag

September 25th, 2014

I am trying to fix a bug in lxpanel’s taskbar plugin, and needed to launch an urgent window. Here’s how I did it in a little python.

#!/usr/bin/python

# urgent.py -- launch an urgent window (Copyright messages are at the bottom)

# To use:
# sudo apt-get install python-xlib
# ./urgent.py

import sys
import Xlib
from Xlib import X, display, Xutil

d = display.Display()
s = d.screen()
w = s.root.create_window(
    50, 50, 300, 200, 2,
    s.root_depth,
    X.InputOutput,
    X.CopyFromParent,
    background_pixel = s.white_pixel,
)

w.set_wm_name( 'Urgent!' )
w.set_wm_hints( flags = Xutil.UrgencyHint )

w.map()

try:
    while 1:
        e = d.next_event()
except Xlib.error.ConnectionClosedError:
    pass


# This code is based on:
# examples/xrandr.py -- demonstrate the RandR extension
# from http://python-xlib.sourceforge.net/
#
#    Copyright (C) 2014 Andy Balaam
#    Copyright (C) 2009 David H. Bronke
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program 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 General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

> Android programming – a non-Android, Android Game

September 24th, 2014

Series: Setup, Menu, Drawing, non-Android

We’re planning to write an Android game. So why would we deliberately avoid Android while we’re writing it? To make sure we’re not overly-dependent on the Android ways of doing things, and are able to run our tests etc. on the local machine:

> Android programming – drawing bitmaps in a game loop

September 21st, 2014

Series: Setup, Menu, Drawing, non-Android

I will be talking about how to write Android programs that share code with non-Android programs. The program I will be writing is a simple game.

This time we’re writing a game loop and drawing images onto a Canvas using a SurfaceView:

> Don’t use email auto-forwarding (emails will go missing)

September 19th, 2014

I’ve been trying to chase down a mysterious problem with emails going missing. The problem with things being missing is that you can’t see them, so it has been difficult to track down exactly what’s going on, but it became clear that we were receiving no email at all from Amazon or Play.com for several months, and that some other mails had disappeared too. I was secretly assuming that I’d screwed something up in the terrifying postfix+dovecot+fetchmail+spamassassin+procmail config on our server, but I couldn’t find any indication of what could be going wrong.

I finally got around to considering whether it was someone else’s fault, and very surprisingly, my ISP Plusnet and my web hosts Bluehost were both very responsive and helpful when I contacted them.

I thought an over-enthusiastic spam filter might be swallowing mails, but it turns out the problem was that I was “forwarding” emails from my domain to my ISP-provided mailbox.

Since the SPF anti-spam system has begun to be implemented, emails from people like Amazon come with SPF policies that make plain message forwarding fail, because forwarding makes it look like emails come from the server forwarding them, when actually they come from the original sender. This makes it impossible to do SPF, so the emails were getting silently deleted.

Now that I know what the problem is, I have even found a sentence describing this on the Wikipedia page on SPF: “SPF breaks plain message forwarding” and this useful article: Why forwarding your email is a BAD idea.

The only solution I can see is to set up a mailbox on my domain host’s site, and stop using the mailbox provided by my ISP. I was only using this mailbox as a holding area before I pulled down the mail via POP3, so it doesn’t actually make much difference to me.

If you’re using GMail you can set it up to pull from a POP3 server, and some other webmail services let you do that too, so using your domain host’s web server doesn’t have to be inconvenient.

Losing email makes me stressed.