diff -r -u sjog-0.5.orig/src/sjog.h sjog-0.5/src/sjog.h
--- sjog-0.5.orig/src/sjog.h	Mon Aug 13 00:45:31 2001
+++ sjog-0.5/src/sjog.h	Sat Mar 16 06:22:43 2002
@@ -15,6 +15,7 @@
 #define JOG_BOTTOM 1
 #define JOG_TOP 31
 #define JOG_PUSHED 64
+#define JOG_BACK 65
 
 /* timeout for windows hide */
 #define SJOG_TIMEOUT 3000
diff -r -u sjog-0.5.orig/src/sjog_brightness.c sjog-0.5/src/sjog_brightness.c
--- sjog-0.5.orig/src/sjog_brightness.c	Mon Aug 13 07:18:31 2001
+++ sjog-0.5/src/sjog_brightness.c	Sat Mar 16 07:24:05 2002
@@ -54,6 +54,13 @@
         sjog_set_brightness(currentBrightness);
         break;
 
+        /* send middle click and hide brightness window */
+     case JOG_BACK:
+        sjog_mouse_middle_click();
+        gtk_timeout_remove(brightnessTimer);
+        sjog_brightness_hide();
+        break;
+
      default:
 
    }
diff -r -u sjog-0.5.orig/src/sjog_list.c sjog-0.5/src/sjog_list.c
--- sjog-0.5.orig/src/sjog_list.c	Mon Aug 13 00:31:27 2001
+++ sjog-0.5/src/sjog_list.c	Sat Mar 16 07:24:26 2002
@@ -168,6 +168,10 @@
      case JOG_TOP:
         sjog_list_select_previous();
         break;
+     case JOG_BACK:
+        sjog_mouse_middle_click();
+        sjog_list_hide();
+        break;
    }
 }
 
diff -r -u sjog-0.5.orig/src/sjog_scroll.c sjog-0.5/src/sjog_scroll.c
--- sjog-0.5.orig/src/sjog_scroll.c	Tue Aug  7 00:14:57 2001
+++ sjog-0.5/src/sjog_scroll.c	Sat Mar 16 07:22:21 2002
@@ -65,6 +65,11 @@
         sjog_scroll_up();
         break;
 
+        /* send middle click */
+     case JOG_BACK:
+        sjog_mouse_middle_click();
+        break;
+
      default:
 
    }
@@ -161,6 +166,27 @@
       XTestFakeButtonEvent(disp, 5, True, CurrentTime);
       XTestFakeButtonEvent(disp, 5, False, 30);
    }
+
+   XSync(disp, False);
+   XTestGrabControl(disp, False);
+
+}
+
+/* -------------------------------------------------------------------------- */
+
+/* Sends Middle_Click mouse event through XTest extension. This won't
+ * work if XTest is not available.
+ */
+void
+sjog_mouse_middle_click()
+{
+   if (disp == NULL)
+      sjog_scroll_init();
+
+   XTestGrabControl(disp, True);
+
+   XTestFakeButtonEvent(disp, 2, True, CurrentTime);
+   XTestFakeButtonEvent(disp, 2, False, 30);
 
    XSync(disp, False);
    XTestGrabControl(disp, False);
diff -r -u sjog-0.5.orig/src/sjog_scroll.h sjog-0.5/src/sjog_scroll.h
--- sjog-0.5.orig/src/sjog_scroll.h	Mon Aug  6 22:03:29 2001
+++ sjog-0.5/src/sjog_scroll.h	Sat Mar 16 06:16:36 2002
@@ -8,5 +8,6 @@
 void sjog_scroll_init_keycodes();
 void sjog_scroll_up();
 void sjog_scroll_down();
+void sjog_mouse_middle_click();
 
 #endif
diff -r -u sjog-0.5.orig/src/sjog_sonypi.c sjog-0.5/src/sjog_sonypi.c
--- sjog-0.5.orig/src/sjog_sonypi.c	Mon Aug  6 21:38:14 2001
+++ sjog-0.5/src/sjog_sonypi.c	Sat Mar 16 06:07:00 2002
@@ -50,6 +50,8 @@
      case SONYPI_EVENT_JOGDIAL_PRESSED:
         sjog_jog_position_changed(JOG_PUSHED);
         break;
+     case SONYPI_EVENT_BACKKEY_PRESSED:
+        sjog_jog_position_changed(JOG_BACK);
 
         /* and the ones it should probably handle ...
 
diff -r -u sjog-0.5.orig/src/sjog_sonypi.h sjog-0.5/src/sjog_sonypi.h
--- sjog-0.5.orig/src/sjog_sonypi.h	Mon Aug  6 21:38:14 2001
+++ sjog-0.5/src/sjog_sonypi.h	Sat Mar 16 06:05:04 2002
@@ -34,6 +34,7 @@
 #define SONYPI_EVENT_FNKEY_S            29
 #define SONYPI_EVENT_FNKEY_B            30
 #define SONYPI_EVENT_BLUETOOTH_PRESSED      31
+#define SONYPI_EVENT_BACKKEY_PRESSED    35
 
 gint sonypi_fd;
 fd_set sonypi_fdset;
diff -r -u sjog-0.5.orig/src/sjog_volume.c sjog-0.5/src/sjog_volume.c
--- sjog-0.5.orig/src/sjog_volume.c	Mon Aug 13 07:17:33 2001
+++ sjog-0.5/src/sjog_volume.c	Sat Mar 16 07:28:59 2002
@@ -66,6 +66,13 @@
         }
         break;
 
+        /* send middle click and hide volume window */
+     case JOG_BACK:
+        sjog_mouse_middle_click();
+        gtk_timeout_remove(volumeTimer);
+        sjog_volume_hide();
+        break;
+
         /* update the progress bar in case the volume is externally modified */
      default:
         gtk_progress_set_value(GTK_PROGRESS(progressBar), currentVolume);
