diff options
Diffstat (limited to 'chrome/browser/platform_util_common_linux.cc')
-rw-r--r-- | chrome/browser/platform_util_common_linux.cc | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/chrome/browser/platform_util_common_linux.cc b/chrome/browser/platform_util_common_linux.cc new file mode 100644 index 0000000..328d260 --- /dev/null +++ b/chrome/browser/platform_util_common_linux.cc @@ -0,0 +1,83 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/platform_util.h" + +#include <gtk/gtk.h> + +#include "app/gtk_util.h" +#include "base/file_util.h" +#include "base/process_util.h" +#include "base/utf_string_conversions.h" +#include "chrome/common/process_watcher.h" +#include "gfx/native_widget_types.h" +#include "googleurl/src/gurl.h" + +namespace platform_util { + +gfx::NativeWindow GetTopLevel(gfx::NativeView view) { + // A detached widget won't have a toplevel window as an ancestor, so we can't + // assume that the query for toplevel will return a window. + GtkWidget* toplevel = gtk_widget_get_ancestor(view, GTK_TYPE_WINDOW); + return GTK_IS_WINDOW(toplevel) ? GTK_WINDOW(toplevel) : NULL; +} + +bool IsWindowActive(gfx::NativeWindow window) { + return gtk_window_is_active(window); +} + +bool IsVisible(gfx::NativeView view) { + return GTK_WIDGET_VISIBLE(view); +} + +void SimpleErrorBox(gfx::NativeWindow parent, + const string16& title, + const string16& message) { + GtkWidget* dialog = gtk_message_dialog_new(parent, GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", UTF16ToUTF8(message).c_str()); + gtk_util::ApplyMessageDialogQuirks(dialog); + gtk_window_set_title(GTK_WINDOW(dialog), UTF16ToUTF8(title).c_str()); + + g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); + gtk_widget_show_all(dialog); + + // Make sure it's big enough to show the title. + GtkRequisition req; + gtk_widget_size_request(dialog, &req); + int width; + gtk_util::GetWidgetSizeFromCharacters(dialog, title.length(), 0, + &width, NULL); + // The fudge factor accounts for extra space needed by the frame + // decorations as well as width differences between average text and the + // actual title text. + width = width * 1.2 + 50; + + if (width > req.width) + gtk_widget_set_size_request(dialog, width, -1); +} + +/* Warning: this may be either Linux or ChromeOS */ +string16 GetVersionStringModifier() { + char* env = getenv("CHROME_VERSION_EXTRA"); + if (!env) + return string16(); + std::string modifier(env); + +#if defined(GOOGLE_CHROME_BUILD) + // Only ever return "", "unknown", "dev" or "beta" in a branded build. + if (modifier == "unstable") // linux version of "dev" + modifier = "dev"; + if (modifier == "stable") { + modifier = ""; + } else if ((modifier == "dev") || (modifier == "beta")) { + // do nothing. + } else { + modifier = "unknown"; + } +#endif + + return ASCIIToUTF16(modifier); +} + +} // namespace platform_util |