]> Dogcows Code - chaz/tint2/commitdiff
less disturbing omnipresent task by dmitry medvinsky
authorThierry Lorthiois <lorthiois@bbsoft.fr>
Sun, 20 Sep 2009 19:57:16 +0000 (19:57 +0000)
committerThierry Lorthiois <lorthiois@bbsoft.fr>
Sun, 20 Sep 2009 19:57:16 +0000 (19:57 +0000)
src/taskbar/task.c
src/tint.c
src/tint2conf/main.c

index b45c184c792923ec7788564ae7958a140d7ae1e1..0bf7349169803da84239f175e93093112fd6dada 100644 (file)
@@ -61,10 +61,16 @@ Task *add_task (Window win)
        Taskbar *tskbar;
        Task *new_tsk2=0;
        int i, j;
-       for (i=0 ; i < nb_panel ; i++) {
-               for (j=0 ; j < panel1[i].nb_desktop ; j++) {
-                       if (new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) continue;
-                       if (nb_panel > 1 && panel1[i].monitor != monitor) continue;
+       for (i = 0; i < nb_panel; i++) {
+               if (nb_panel > 1 && panel1[i].monitor != monitor) continue;
+               for (j = 0; j < panel1[i].nb_desktop; j++) {
+                       if ((new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j)
+                       || (panel_mode == MULTI_DESKTOP && new_tsk.desktop == ALLDESKTOP && server.desktop != j))
+                               continue;
+//     for (i=0 ; i < nb_panel ; i++) {
+//             for (j=0 ; j < panel1[i].nb_desktop ; j++) {
+//                     if (new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) continue;
+//                     if (nb_panel > 1 && panel1[i].monitor != monitor) continue;
 
                        tskbar = &panel1[i].taskbar[j];
                        new_tsk2 = malloc(sizeof(Task));
index db6346763a042114f3b93473e5a5678f2cf4b467..a3ac2ec8602e2e883de7be74cf7892df021e9389 100644 (file)
@@ -394,35 +394,52 @@ void event_property_notify (XEvent *e)
                // Change desktop
                else if (at == server.atom._NET_CURRENT_DESKTOP) {
                        server.desktop = server_get_current_desktop ();
-                       for (i=0 ; i < nb_panel ; i++) {
+                       for (i = 0; i < nb_panel; i++) {
                                Panel *panel = &panel1[i];
-                               if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) {
-                                       // redraw taskbar
-                                       panel_refresh = 1;
-                                       Taskbar *tskbar;
+                               if (panel_mode == MULTI_DESKTOP) {
+                                       Taskbar *tskbar, *tskbar_active;
+                                       GSList *l;
                                        Task *tsk;
-                                       GSList *l;
-                                       for (j=0 ; j < panel->nb_desktop ; j++) {
-                                               tskbar = &panel->taskbar[j];
-                                               if (tskbar->area.is_active) {
-                                                       tskbar->area.is_active = 0;
-                                                       tskbar->area.redraw = 1;
-                                                       for (l = tskbar->area.list; l ; l = l->next) {
-                                                               tsk = l->data;
-                                                               tsk->area.redraw = 1;
-                                                       }
-                                               }
-                                               if (j == server.desktop) {
-                                                       tskbar->area.is_active = 1;
-                                                       tskbar->area.redraw = 1;
-                                                       for (l = tskbar->area.list; l ; l = l->next) {
-                                                               tsk = l->data;
-                                                               tsk->area.redraw = 1;
-                                                       }
-                                               }
+                                       char redraw_tasks;
+
+                                       tskbar_active = &panel->taskbar[server.desktop];
+                                       if (panel->g_taskbar.use_active) {
+                                               tskbar_active->area.is_active = 1;
+                                               tskbar_active->area.redraw = 1;
                                        }
-                               }
-                       }
+
+                                       for (j = 0; j < panel->nb_desktop; j++) {
+                                               tskbar = &panel->taskbar[j];
+
+                                               // need to redraw tasks only on taskbar, which was active, or which became active
+                                               redraw_tasks = 0;
+                                               if (panel->g_taskbar.use_active && tskbar->area.is_active && tskbar != tskbar_active) {
+                                                       tskbar->area.is_active = 0;
+                                                       tskbar->area.redraw = 1;
+                                                       redraw_tasks = 1;
+                                               } else if (panel->g_taskbar.use_active && tskbar == tskbar_active) {
+                                                       redraw_tasks = 1;
+                                               }
+
+                                               for (l = tskbar->area.list; l;) {
+                                                       tsk = l->data;
+                                                       l = l->next;
+
+                                                       if (redraw_tasks) tsk->area.redraw = 1;
+
+                                                       if (tsk->desktop == ALLDESKTOP && tskbar != tskbar_active) {
+                                                               // move omnipresent tasks to current taskbar
+                                                               tskbar->area.list = g_slist_remove(tskbar->area.list, tsk);
+                                                               tskbar->area.resize = 1;
+                                                               tsk->area.parent = tskbar_active;
+                                                               tskbar_active->area.list = g_slist_append(tskbar_active->area.list, tsk);
+                                                               tskbar_active->area.resize = 1;
+                                                       }
+                                               }
+                                       }
+                                       panel_refresh = 1;
+                               }
+                       }
                        if (panel_mode != MULTI_DESKTOP) {
                                visible_object();
                        }
index a1484ffc77fb5e5f70c6be77cdc022f407460a11..15c96340d0c38156ea9fea3d011fd7d2bec90fa1 100644 (file)
@@ -75,7 +75,7 @@ static const char *fallback_ui_file =
         "      <menuitem action='ThemeAdd'/>"
         "      <menuitem action='ThemeSaveAs'/>"
         "      <separator/>"
-//        "      <menuitem action='ThemeProperties'/>"
+        "      <menuitem action='ThemeProperties'/>"
         "      <menuitem action='ThemeRename'/>"
         "      <separator/>"
         "      <menuitem action='ThemeDelete'/>"
@@ -91,9 +91,9 @@ static const char *fallback_ui_file =
         "    </menu>"
         "  </menubar>"
         "  <toolbar  name='ToolBar'>"
-//        "    <toolitem action='ViewRefreshAll'/>"
-//        "    <separator/>"
-//        "    <toolitem action='ThemeProperties'/>"
+        "    <toolitem action='ViewRefreshAll'/>"
+        "    <separator/>"
+        "    <toolitem action='ThemeProperties'/>"
         "    <toolitem action='ViewApply'/>"
         "  </toolbar>"
         "</ui>";
@@ -233,7 +233,7 @@ static void menuAdd (GtkWindow *parent)
        if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                GSList *l, *list = gtk_file_chooser_get_filenames(chooser);
 
-               // remember this folder the next time we use this dialog
+               // TODO: remember this folder the next time we use this dialog
                //char *folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog));
                //pref_string_set( PREF_KEY_OPEN_DIALOG_FOLDER, folder );
                //g_free( folder );
This page took 0.024219 seconds and 4 git commands to generate.