Merge branch 'backport' into work
authorDana Jansens <danakj@orodu.net>
Thu, 6 Mar 2008 07:46:32 +0000 (02:46 -0500)
committerDana Jansens <danakj@orodu.net>
Thu, 6 Mar 2008 07:46:32 +0000 (02:46 -0500)
Conflicts:

openbox/client.c

.gitignore
openbox/client.c
openbox/client.h
po/ja.po
po/pt_BR.po
po/zh_TW.po
render/image.c

index 3f68a41..9e6bcb6 100644 (file)
@@ -51,6 +51,7 @@ po/remove-potcdate.sed
 render/obrender-4.0.pc
 obt/obt-4.0.pc
 tools/gnome-panel-control/gnome-panel-control
+tools/gdm-control/gdm-control
 version.h
 .libs
 .deps
@@ -91,3 +92,4 @@ tests/title
 tests/urgent
 tests/usertimewin
 data/autostart.sh
+<+
index e9443d4..a055e63 100644 (file)
@@ -414,12 +414,14 @@ void client_manage(Window window, ObPrompt *prompt)
                   activate ? "yes" : "no");
     if (activate) {
         gboolean raise = FALSE;
-        gboolean relative_focused = FALSE;
+        gboolean relative_focused;
+        gboolean parent_focused;
 
+        parent_focused = (focus_client != NULL &&
+                          client_search_focus_parent(self));
         relative_focused = (focus_client != NULL &&
-                            client_search_focus_tree_full(self) != NULL &&
-                            client_search_focus_group_full(self) != NULL);
-
+                            (client_search_focus_tree_full(self) != NULL ||
+                             client_search_focus_group_full(self) != NULL));
 
         /* This is focus stealing prevention */
         ob_debug_type(OB_DEBUG_FOCUS,
@@ -427,6 +429,12 @@ void client_manage(Window window, ObPrompt *prompt)
                       "launched at %u (last user interaction time %u)",
                       self->window, map_time, launch_time,
                       event_last_user_time);
+        ob_debug_type(OB_DEBUG_FOCUS,
+                      "Current focus_client: %s",
+                      (focus_client ? focus_client->title : "(none)"));
+        ob_debug_type(OB_DEBUG_FOCUS,
+                      "parent focuesed: %d  relative focused: %d",
+                      parent_focused, relative_focused);
 
         if (menu_frame_visible || moveresize_in_progress) {
             activate = FALSE;
@@ -454,7 +462,8 @@ void client_manage(Window window, ObPrompt *prompt)
         else if (focus_client) {
             /* If the user is working in another window right now, then don't
                steal focus */
-            if (event_last_user_time && launch_time &&
+            if (!parent_focused &&
+                event_last_user_time && launch_time &&
                 event_time_after(event_last_user_time, launch_time) &&
                 event_last_user_time != launch_time &&
                 event_time_after(event_last_user_time,
@@ -463,7 +472,8 @@ void client_manage(Window window, ObPrompt *prompt)
                 activate = FALSE;
                 ob_debug_type(OB_DEBUG_FOCUS,
                               "Not focusing the window because the user is "
-                              "working in another window");
+                              "working in another window that is not "
+                              "its parent");
             }
             /* If the new window is a transient (and its relatives aren't
                focused) */
@@ -3958,6 +3968,21 @@ ObClient *client_search_focus_parent(ObClient *self)
     return NULL;
 }
 
+ObClient *client_search_focus_parent_full(ObClient *self)
+{
+    GSList *it;
+    ObClient *ret = NULL;
+
+    for (it = self->parents; it; it = g_slist_next(it)) {
+        if (client_focused(it->data))
+            ret = it->data;
+        else
+            ret = client_search_focus_parent_full(it->data);
+        if (ret) break;
+    }
+    return ret;
+}
+
 ObClient *client_search_parent(ObClient *self, ObClient *search)
 {
     GSList *it;
index 6a396cf..5e26ef3 100644 (file)
@@ -641,12 +641,18 @@ RrImage* client_icon(ObClient *self);
   transient for */
 gboolean client_has_parent(ObClient *self);
 
-/*! Searches a client's direct parents for a focused window. The function does
-  not check for the passed client, only for *ONE LEVEL* of its parents.
-  If no focused parentt is found, NULL is returned.
+/*! Searches a client's immediate parents for a focused window. The function
+  does not check for the passed client, only for *ONE LEVEL* of its parents.
+  If no focused parent is found, NULL is returned.
 */
 ObClient *client_search_focus_parent(ObClient *self);
 
+/*! Searches a client's parents for a focused window. The function
+  does not check for the passed client, but searches through all of its
+  parents. If no focused parent is found, NULL is returned.
+*/
+ObClient *client_search_focus_parent_full(ObClient *self);
+
 /*! Searches a client's transients for a focused window. The function does not
   check for the passed client, only for its transients.
   If no focused transient is found, NULL is returned.
index 876d117..5620386 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6.1\n"
+"Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-03-03 02:10+0100\n"
-"PO-Revision-Date: 2008-03-02 17:18+0100\n"
+"POT-Creation-Date: 2008-03-04 16:31+0100\n"
+"PO-Revision-Date: 2008-03-04 16:32+0100\n"
 "Last-Translator: Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>\n"
 "Language-Team: Japanese <ja@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -33,7 +33,7 @@ msgstr "はい"
 
 #: openbox/actions/execute.c:133
 msgid "Execute"
-msgstr ""
+msgstr "実行する"
 
 #: openbox/actions/execute.c:142
 #, c-format
@@ -55,21 +55,23 @@ msgstr "Openbox を終了してもよろしいですか?"
 
 #: openbox/actions/exit.c:57
 msgid "Exit Openbox"
-msgstr ""
+msgstr "Openbox を終了する"
 
 #: openbox/actions/session.c:41
 msgid ""
 "The SessionLogout action is not available since Openbox was built without "
 "session management support"
 msgstr ""
+"Openbox がセッション管理の機能なしに作られたので SessionLogout アクションは利"
+"用できません。"
 
 #: openbox/actions/session.c:63 openbox/actions/session.c:68
 msgid "Log Out"
-msgstr ""
+msgstr "ログアウト"
 
 #: openbox/actions/session.c:67
 msgid "Are you sure you want to log out?"
-msgstr ""
+msgstr "ログアウトしてもよろしいですか?"
 
 #: openbox/client.c:2004
 msgid "Unnamed Window"
@@ -269,10 +271,13 @@ msgid ""
 "configuration files.  See stdout for more information.  The last error seen "
 "was in file \"%s\" line %d, with message: %s"
 msgstr ""
+"Openbox の設定ファイルを解析中に XML の構文エラーが見つかりました。詳しい情報"
+"は標準出力を見て下さい。最後に見つかったエラーは\"%s\"ファイルの%d 行目で、説"
+"明はこうです:%s"
 
 #: openbox/openbox.c:382
 msgid "Openbox Syntax Error"
-msgstr ""
+msgstr "Openbox 構文エラー"
 
 #: openbox/openbox.c:382
 msgid "Close"
@@ -328,7 +333,7 @@ msgid ""
 "Passing messages to a running Openbox instance:\n"
 msgstr ""
 "\n"
-"実行中の Openbox にメッセージを送ります:\n"
+"実行中の Openbox に命令を送ります:\n"
 
 #: openbox/openbox.c:543
 msgid "  --reconfigure       Reload Openbox's configuration\n"
@@ -423,19 +428,19 @@ msgstr "デスクトップ%i"
 msgid "Unable to make directory \"%s\": %s"
 msgstr "ディレクトリ\"%s\"を作れません: %s"
 
-#: openbox/session.c:452
+#: openbox/session.c:467
 #, c-format
 msgid "Unable to save the session to \"%s\": %s"
 msgstr "セッションを\"%s\"に保存できません: %s"
 
-#: openbox/session.c:584
+#: openbox/session.c:599
 #, c-format
 msgid "Error while saving the session to \"%s\": %s"
 msgstr "セッションを\"%s\"に保存中にエラーが起きました: %s"
 
-#: openbox/session.c:821
+#: openbox/session.c:836
 msgid "Not connected to a session manager"
-msgstr ""
+msgstr "セッションマネージャに接続されていません。"
 
 #: openbox/startupnotify.c:243
 #, c-format
index 47d4a43..7fa4857 100644 (file)
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6.1\n"
+"Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-03-03 02:10+0100\n"
-"PO-Revision-Date: 2008-02-28 17:26-0500\n"
+"POT-Creation-Date: 2008-03-04 22:06+0100\n"
+"PO-Revision-Date: 2008-03-04 16:07-0500\n"
 "Last-Translator: Og Maciel <ogmaciel@gnome.org>\n"
 "Language-Team: Brazilian Portuguese <gnome-l10n-br@listas.cipsga.org.br>\n"
 "MIME-Version: 1.0\n"
@@ -32,7 +32,7 @@ msgstr "Sim"
 
 #: openbox/actions/execute.c:133
 msgid "Execute"
-msgstr ""
+msgstr "Executar"
 
 #: openbox/actions/execute.c:142
 #, c-format
@@ -54,21 +54,23 @@ msgstr "Você tem certeza que deseja sair do Openbox?"
 
 #: openbox/actions/exit.c:57
 msgid "Exit Openbox"
-msgstr ""
+msgstr "Sair do Openbox"
 
 #: openbox/actions/session.c:41
 msgid ""
 "The SessionLogout action is not available since Openbox was built without "
 "session management support"
 msgstr ""
+"A ação SessionLogout não está disponível já que o Openbox foi compilado sem "
+"suporte de gerenciamento de sessões"
 
 #: openbox/actions/session.c:63 openbox/actions/session.c:68
 msgid "Log Out"
-msgstr ""
+msgstr "Sair"
 
 #: openbox/actions/session.c:67
 msgid "Are you sure you want to log out?"
-msgstr ""
+msgstr "Você tem certeza que deseja sair?"
 
 #: openbox/client.c:2004
 msgid "Unnamed Window"
@@ -273,10 +275,13 @@ msgid ""
 "configuration files.  See stdout for more information.  The last error seen "
 "was in file \"%s\" line %d, with message: %s"
 msgstr ""
+"Um ou mais erros de sintaxe de XML foram encontrados ao analisar os arquivos "
+"de configuração do Openbox. Veja a saída padrão para mais informação. O "
+"último erro relatado foi no arquivo \"%s\" linha %d, com a mensagem: %s"
 
 #: openbox/openbox.c:382
 msgid "Openbox Syntax Error"
-msgstr ""
+msgstr "Erro de Sintaxe do Openbox"
 
 #: openbox/openbox.c:382
 msgid "Close"
@@ -434,19 +439,19 @@ msgstr "área de trabalho %i"
 msgid "Unable to make directory \"%s\": %s"
 msgstr "Não foi possível criar o diretório \"%s\": %s"
 
-#: openbox/session.c:452
+#: openbox/session.c:467
 #, c-format
 msgid "Unable to save the session to \"%s\": %s"
 msgstr "Não foi possível salvar a sessão em \"%s\": %s"
 
-#: openbox/session.c:584
+#: openbox/session.c:599
 #, c-format
 msgid "Error while saving the session to \"%s\": %s"
 msgstr "Erro enquanto salvando a sessão em \"%s\": %s"
 
-#: openbox/session.c:821
+#: openbox/session.c:836
 msgid "Not connected to a session manager"
-msgstr ""
+msgstr "Não está conectado à um gerente de sessões"
 
 #: openbox/startupnotify.c:243
 #, c-format
index a0c1d08..8fc2569 100644 (file)
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6.1\n"
+"Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-03-03 02:10+0100\n"
-"PO-Revision-Date: 2008-02-17 23:29+0800\n"
+"POT-Creation-Date: 2008-03-05 18:10+0100\n"
+"PO-Revision-Date: 2008-03-06 01:01+0800\n"
 "Last-Translator: 洪任諭 <pcman.tw@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
 "MIME-Version: 1.0\n"
@@ -32,7 +32,7 @@ msgstr "是"
 
 #: openbox/actions/execute.c:133
 msgid "Execute"
-msgstr ""
+msgstr "執行"
 
 #: openbox/actions/execute.c:142
 #, c-format
@@ -42,37 +42,38 @@ msgstr "轉換路徑「%s」自 utf8 時失敗"
 #: openbox/actions/exit.c:52 openbox/actions/session.c:62
 #: openbox/client.c:3460
 msgid "Cancel"
-msgstr ""
+msgstr "取消"
 
 #: openbox/actions/exit.c:53
 msgid "Exit"
-msgstr ""
+msgstr "離開"
 
 #: openbox/actions/exit.c:56
 msgid "Are you sure you want to exit Openbox?"
-msgstr ""
+msgstr "你確定要離開 Openbox?"
 
 #: openbox/actions/exit.c:57
 msgid "Exit Openbox"
-msgstr ""
+msgstr "離開 Openbox"
 
 #: openbox/actions/session.c:41
 msgid ""
 "The SessionLogout action is not available since Openbox was built without "
 "session management support"
 msgstr ""
+"SessionLogout 動作無法使用,因為 Openbox 在編譯時沒有使用作業階段管理支援"
 
 #: openbox/actions/session.c:63 openbox/actions/session.c:68
 msgid "Log Out"
-msgstr ""
+msgstr "登出"
 
 #: openbox/actions/session.c:67
 msgid "Are you sure you want to log out?"
-msgstr ""
+msgstr "你確定要登出嗎?"
 
 #: openbox/client.c:2004
 msgid "Unnamed Window"
-msgstr ""
+msgstr "未命名視窗"
 
 #: openbox/client.c:2018 openbox/client.c:2050
 msgid "Killing..."
@@ -91,7 +92,7 @@ msgstr "視窗「%s」似乎已經停止回應。  你想送出 \"%s\" 訊息強
 
 #: openbox/client.c:3451
 msgid "End Process"
-msgstr ""
+msgstr "結束 Process"
 
 #: openbox/client.c:3455
 #, c-format
@@ -102,7 +103,7 @@ msgstr "視窗「%s」似乎已經停止回應。  你想從 X 伺服器將它
 
 #: openbox/client.c:3457
 msgid "Disconnect"
-msgstr ""
+msgstr "斷線"
 
 #: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
 msgid "Go there..."
@@ -267,10 +268,12 @@ msgid ""
 "configuration files.  See stdout for more information.  The last error seen "
 "was in file \"%s\" line %d, with message: %s"
 msgstr ""
+"解析 Openbox 設定檔 XML 語法時發現一個或多個錯誤。 查看 stdout 以獲得更多資"
+"訊。 最後一個發現的錯誤在檔案 \"%s\" 第 %d 行。訊息:%s"
 
 #: openbox/openbox.c:382
 msgid "Openbox Syntax Error"
-msgstr ""
+msgstr "Openbox 語法錯誤"
 
 #: openbox/openbox.c:382
 msgid "Close"
@@ -420,19 +423,19 @@ msgstr "桌面 %i"
 msgid "Unable to make directory \"%s\": %s"
 msgstr "無法製作目錄「%s」:%s"
 
-#: openbox/session.c:452
+#: openbox/session.c:467
 #, c-format
 msgid "Unable to save the session to \"%s\": %s"
 msgstr "無法儲存執行階段到「%s」:%s"
 
-#: openbox/session.c:584
+#: openbox/session.c:599
 #, c-format
 msgid "Error while saving the session to \"%s\": %s"
 msgstr "當儲存執行階段「%s」時發生錯誤:%s"
 
-#: openbox/session.c:821
+#: openbox/session.c:836
 msgid "Not connected to a session manager"
-msgstr ""
+msgstr "沒有連接到作業階段管理員"
 
 #: openbox/startupnotify.c:243
 #, c-format
index f6d70ee..6b79c45 100644 (file)
@@ -294,6 +294,7 @@ void RrImageDrawRGBA(RrPixel32 *target, RrTextureRGBA *rgba,
             DrawRGBA(target, target_w, target_h,
                      scaled->data, scaled->width, scaled->height,
                      rgba->alpha, area);
+            RrImagePicFree(scaled);
     }
     else
         DrawRGBA(target, target_w, target_h,