Merge pull request #404 from atom/skip-taskbar

Add BrowserWindow.setSkipTaskbar API
This commit is contained in:
Cheng Zhao 2014-06-16 11:00:43 +08:00
commit 4a7a417423
13 changed files with 48 additions and 0 deletions

View file

@ -259,6 +259,10 @@ void Window::FlashFrame(bool flash) {
window_->FlashFrame(flash); window_->FlashFrame(flash);
} }
void Window::SetSkipTaskbar(bool skip) {
window_->SetSkipTaskbar(skip);
}
void Window::SetKiosk(bool kiosk) { void Window::SetKiosk(bool kiosk) {
window_->SetKiosk(kiosk); window_->SetKiosk(kiosk);
} }
@ -366,6 +370,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("setTitle", &Window::SetTitle) .SetMethod("setTitle", &Window::SetTitle)
.SetMethod("getTitle", &Window::GetTitle) .SetMethod("getTitle", &Window::GetTitle)
.SetMethod("flashFrame", &Window::FlashFrame) .SetMethod("flashFrame", &Window::FlashFrame)
.SetMethod("setSkipTaskbar", &Window::SetSkipTaskbar)
.SetMethod("setKiosk", &Window::SetKiosk) .SetMethod("setKiosk", &Window::SetKiosk)
.SetMethod("isKiosk", &Window::IsKiosk) .SetMethod("isKiosk", &Window::IsKiosk)
.SetMethod("setRepresentedFilename", &Window::SetRepresentedFilename) .SetMethod("setRepresentedFilename", &Window::SetRepresentedFilename)

View file

@ -90,6 +90,7 @@ class Window : public mate::EventEmitter,
void SetTitle(const std::string& title); void SetTitle(const std::string& title);
std::string GetTitle(); std::string GetTitle();
void FlashFrame(bool flash); void FlashFrame(bool flash);
void SetSkipTaskbar(bool skip);
void SetKiosk(bool kiosk); void SetKiosk(bool kiosk);
bool IsKiosk(); bool IsKiosk();
void OpenDevTools(); void OpenDevTools();

View file

@ -176,6 +176,10 @@ void NativeWindow::InitFromOptions(base::DictionaryValue* options) {
if (options->GetBoolean(switches::kFullscreen, &fullscreen) && fullscreen) { if (options->GetBoolean(switches::kFullscreen, &fullscreen) && fullscreen) {
SetFullscreen(true); SetFullscreen(true);
} }
bool skip;
if (options->GetBoolean(switches::kSkipTaskbar, &skip) && skip) {
SetSkipTaskbar(skip);
}
bool kiosk; bool kiosk;
if (options->GetBoolean(switches::kKiosk, &kiosk) && kiosk) { if (options->GetBoolean(switches::kKiosk, &kiosk) && kiosk) {
SetKiosk(kiosk); SetKiosk(kiosk);

View file

@ -127,6 +127,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
virtual void SetTitle(const std::string& title) = 0; virtual void SetTitle(const std::string& title) = 0;
virtual std::string GetTitle() = 0; virtual std::string GetTitle() = 0;
virtual void FlashFrame(bool flash) = 0; virtual void FlashFrame(bool flash) = 0;
virtual void SetSkipTaskbar(bool skip) = 0;
virtual void SetKiosk(bool kiosk) = 0; virtual void SetKiosk(bool kiosk) = 0;
virtual bool IsKiosk() = 0; virtual bool IsKiosk() = 0;
virtual void SetRepresentedFilename(const std::string& filename); virtual void SetRepresentedFilename(const std::string& filename);

View file

@ -366,6 +366,11 @@ void NativeWindowGtk::FlashFrame(bool flash) {
gtk_window_set_urgency_hint(window_, flash); gtk_window_set_urgency_hint(window_, flash);
} }
void NativeWindowGtk::SetSkipTaskbar(bool skip) {
gtk_window_set_skip_taskbar_hint(window_, skip);
gtk_window_set_skip_pager_hint(window_, skip);
}
void NativeWindowGtk::SetKiosk(bool kiosk) { void NativeWindowGtk::SetKiosk(bool kiosk) {
SetFullscreen(kiosk); SetFullscreen(kiosk);
} }

View file

@ -62,6 +62,7 @@ class NativeWindowGtk : public NativeWindow,
virtual void SetTitle(const std::string& title) OVERRIDE; virtual void SetTitle(const std::string& title) OVERRIDE;
virtual std::string GetTitle() OVERRIDE; virtual std::string GetTitle() OVERRIDE;
virtual void FlashFrame(bool flash) OVERRIDE; virtual void FlashFrame(bool flash) OVERRIDE;
virtual void SetSkipTaskbar(bool skip) OVERRIDE;
virtual void SetKiosk(bool kiosk) OVERRIDE; virtual void SetKiosk(bool kiosk) OVERRIDE;
virtual bool IsKiosk() OVERRIDE; virtual bool IsKiosk() OVERRIDE;
virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;

View file

@ -54,6 +54,7 @@ class NativeWindowMac : public NativeWindow {
virtual void SetTitle(const std::string& title) OVERRIDE; virtual void SetTitle(const std::string& title) OVERRIDE;
virtual std::string GetTitle() OVERRIDE; virtual std::string GetTitle() OVERRIDE;
virtual void FlashFrame(bool flash) OVERRIDE; virtual void FlashFrame(bool flash) OVERRIDE;
virtual void SetSkipTaskbar(bool skip) OVERRIDE;
virtual void SetKiosk(bool kiosk) OVERRIDE; virtual void SetKiosk(bool kiosk) OVERRIDE;
virtual bool IsKiosk() OVERRIDE; virtual bool IsKiosk() OVERRIDE;
virtual void SetRepresentedFilename(const std::string& filename) OVERRIDE; virtual void SetRepresentedFilename(const std::string& filename) OVERRIDE;

View file

@ -416,6 +416,9 @@ void NativeWindowMac::FlashFrame(bool flash) {
} }
} }
void NativeWindowMac::SetSkipTaskbar(bool skip) {
}
void NativeWindowMac::SetKiosk(bool kiosk) { void NativeWindowMac::SetKiosk(bool kiosk) {
if (kiosk && !is_kiosk_) { if (kiosk && !is_kiosk_) {
kiosk_options_ = [NSApp currentSystemPresentationOptions]; kiosk_options_ = [NSApp currentSystemPresentationOptions];

View file

@ -4,6 +4,8 @@
#include "atom/browser/native_window_win.h" #include "atom/browser/native_window_win.h"
#include <shobjidl.h>
#include <string> #include <string>
#include <vector> #include <vector>
@ -14,6 +16,7 @@
#include "atom/common/options_switches.h" #include "atom/common/options_switches.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/values.h" #include "base/values.h"
#include "base/win/scoped_comptr.h"
#include "content/public/browser/native_web_keyboard_event.h" #include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/render_widget_host_view.h"
@ -395,6 +398,18 @@ void NativeWindowWin::FlashFrame(bool flash) {
window_->FlashFrame(flash); window_->FlashFrame(flash);
} }
void NativeWindowWin::SetSkipTaskbar(bool skip) {
base::win::ScopedComPtr<ITaskbarList> taskbar;
if (FAILED(taskbar.CreateInstance(CLSID_TaskbarList, NULL,
CLSCTX_INPROC_SERVER)) ||
FAILED(taskbar->HrInit()))
return;
if (skip)
taskbar->DeleteTab(GetNativeWindow());
else
taskbar->AddTab(GetNativeWindow());
}
void NativeWindowWin::SetKiosk(bool kiosk) { void NativeWindowWin::SetKiosk(bool kiosk) {
SetFullscreen(kiosk); SetFullscreen(kiosk);
} }

View file

@ -71,6 +71,7 @@ class NativeWindowWin : public NativeWindow,
virtual void SetTitle(const std::string& title) OVERRIDE; virtual void SetTitle(const std::string& title) OVERRIDE;
virtual std::string GetTitle() OVERRIDE; virtual std::string GetTitle() OVERRIDE;
virtual void FlashFrame(bool flash) OVERRIDE; virtual void FlashFrame(bool flash) OVERRIDE;
virtual void SetSkipTaskbar(bool skip) OVERRIDE;
virtual void SetKiosk(bool kiosk) OVERRIDE; virtual void SetKiosk(bool kiosk) OVERRIDE;
virtual bool IsKiosk() OVERRIDE; virtual bool IsKiosk() OVERRIDE;
virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;

View file

@ -24,6 +24,9 @@ const char kMaxHeight[] = "max-height";
const char kResizable[] = "resizable"; const char kResizable[] = "resizable";
const char kFullscreen[] = "fullscreen"; const char kFullscreen[] = "fullscreen";
// Whether the window should show in taskbar.
const char kSkipTaskbar[] = "skip-taskbar";
// Start with the kiosk mode, see Opera's page for description: // Start with the kiosk mode, see Opera's page for description:
// http://www.opera.com/support/mastering/kiosk/ // http://www.opera.com/support/mastering/kiosk/
const char kKiosk[] = "kiosk"; const char kKiosk[] = "kiosk";

View file

@ -24,6 +24,7 @@ extern const char kMaxWidth[];
extern const char kMaxHeight[]; extern const char kMaxHeight[];
extern const char kResizable[]; extern const char kResizable[];
extern const char kFullscreen[]; extern const char kFullscreen[];
extern const char kSkipTaskbar[];
extern const char kKiosk[]; extern const char kKiosk[];
extern const char kAlwaysOnTop[]; extern const char kAlwaysOnTop[];
extern const char kNodeIntegration[]; extern const char kNodeIntegration[];

View file

@ -42,6 +42,7 @@ You can also create a window without chrome by using
* `always-on-top` Boolean - Whether the window should always stay on top of * `always-on-top` Boolean - Whether the window should always stay on top of
other windows other windows
* `fullscreen` Boolean - Whether the window should show in fullscreen * `fullscreen` Boolean - Whether the window should show in fullscreen
* `skip-taskbar` Boolean - Do not show window in taskbar
* `kiosk` Boolean - The kiosk mode * `kiosk` Boolean - The kiosk mode
* `title` String - Default window title * `title` String - Default window title
* `icon` String - The path of icon file * `icon` String - The path of icon file
@ -353,6 +354,12 @@ Returns the title of the native window.
Flashes the window to attract user's attention. Flashes the window to attract user's attention.
### BrowserWindow.setSkipTaskbar(skip)
* `skip` Boolean
Makes the window do not show in taskbar.
### BrowserWindow.setKiosk(flag) ### BrowserWindow.setKiosk(flag)
* `flag` Boolean * `flag` Boolean