Fix focusing message box
This commit is contained in:
parent
b98cdf71c4
commit
02e28ea758
1 changed files with 14 additions and 9 deletions
|
@ -12,6 +12,7 @@
|
||||||
#include "chrome/browser/ui/libgtk2ui/gtk2_signal.h"
|
#include "chrome/browser/ui/libgtk2ui/gtk2_signal.h"
|
||||||
#include "chrome/browser/ui/libgtk2ui/gtk2_util.h"
|
#include "chrome/browser/ui/libgtk2ui/gtk2_util.h"
|
||||||
#include "chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h"
|
#include "chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h"
|
||||||
|
#include "ui/views/widget/desktop_aura/x11_desktop_handler.h"
|
||||||
|
|
||||||
#define ANSI_FOREGROUND_RED "\x1b[31m"
|
#define ANSI_FOREGROUND_RED "\x1b[31m"
|
||||||
#define ANSI_FOREGROUND_BLACK "\x1b[30m"
|
#define ANSI_FOREGROUND_BLACK "\x1b[30m"
|
||||||
|
@ -25,7 +26,7 @@ namespace {
|
||||||
|
|
||||||
class GtkMessageBox {
|
class GtkMessageBox {
|
||||||
public:
|
public:
|
||||||
GtkMessageBox(bool synchronous,
|
GtkMessageBox(bool modal,
|
||||||
NativeWindow* parent_window,
|
NativeWindow* parent_window,
|
||||||
MessageBoxType type,
|
MessageBoxType type,
|
||||||
const std::vector<std::string>& buttons,
|
const std::vector<std::string>& buttons,
|
||||||
|
@ -35,15 +36,11 @@ class GtkMessageBox {
|
||||||
const gfx::ImageSkia& icon)
|
const gfx::ImageSkia& icon)
|
||||||
: dialog_scope_(parent_window),
|
: dialog_scope_(parent_window),
|
||||||
cancel_id_(0) {
|
cancel_id_(0) {
|
||||||
// The dialog should be modal when showed synchronous.
|
|
||||||
int flags = GTK_DIALOG_NO_SEPARATOR;
|
|
||||||
if (synchronous)
|
|
||||||
flags |= GTK_DIALOG_MODAL;
|
|
||||||
|
|
||||||
// Create dialog.
|
// Create dialog.
|
||||||
dialog_ = gtk_message_dialog_new(
|
dialog_ = gtk_message_dialog_new(
|
||||||
nullptr, // parent
|
nullptr, // parent
|
||||||
static_cast<GtkDialogFlags>(flags), // flags
|
modal ? GTK_DIALOG_MODAL : // modal dialog
|
||||||
|
static_cast<GtkDialogFlags>(0), // no flags
|
||||||
GTK_MESSAGE_OTHER, // no icon
|
GTK_MESSAGE_OTHER, // no icon
|
||||||
GTK_BUTTONS_NONE, // no buttons
|
GTK_BUTTONS_NONE, // no buttons
|
||||||
"%s", message.c_str());
|
"%s", message.c_str());
|
||||||
|
@ -95,13 +92,21 @@ class GtkMessageBox {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Show() {
|
||||||
|
gtk_widget_show_all(dialog_);
|
||||||
|
// We need to call gtk_window_present after making the widgets visible to
|
||||||
|
// make sure window gets correctly raised and gets focus.
|
||||||
|
int time = views::X11DesktopHandler::get()->wm_user_time_ms();
|
||||||
|
gtk_window_present_with_time(GTK_WINDOW(dialog_), time);
|
||||||
|
}
|
||||||
|
|
||||||
void RunAsynchronous(const MessageBoxCallback& callback) {
|
void RunAsynchronous(const MessageBoxCallback& callback) {
|
||||||
callback_ = callback;
|
callback_ = callback;
|
||||||
g_signal_connect(dialog_, "delete-event",
|
g_signal_connect(dialog_, "delete-event",
|
||||||
G_CALLBACK(gtk_widget_hide_on_delete), nullptr);
|
G_CALLBACK(gtk_widget_hide_on_delete), nullptr);
|
||||||
g_signal_connect(dialog_, "response",
|
g_signal_connect(dialog_, "response",
|
||||||
G_CALLBACK(OnResponseDialogThunk), this);
|
G_CALLBACK(OnResponseDialogThunk), this);
|
||||||
gtk_widget_show_all(dialog_);
|
Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
CHROMEGTK_CALLBACK_1(GtkMessageBox, void, OnResponseDialog, int);
|
CHROMEGTK_CALLBACK_1(GtkMessageBox, void, OnResponseDialog, int);
|
||||||
|
@ -141,7 +146,7 @@ int ShowMessageBox(NativeWindow* parent,
|
||||||
const std::string& detail,
|
const std::string& detail,
|
||||||
const gfx::ImageSkia& icon) {
|
const gfx::ImageSkia& icon) {
|
||||||
GtkMessageBox box(true, parent, type, buttons, title, message, detail, icon);
|
GtkMessageBox box(true, parent, type, buttons, title, message, detail, icon);
|
||||||
gtk_widget_show_all(box.dialog());
|
box.Show();
|
||||||
int response = gtk_dialog_run(GTK_DIALOG(box.dialog()));
|
int response = gtk_dialog_run(GTK_DIALOG(box.dialog()));
|
||||||
if (response < 0)
|
if (response < 0)
|
||||||
return box.cancel_id();
|
return box.cancel_id();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue