Show a notification upon opening a tab or window

The notification is shown when in fullscreen mode or the window
is maximised, and a window is opened or a tab is opened while
the tab bar is not visible.
This commit is contained in:
Christian Dywan 2011-04-19 23:16:34 +02:00
parent 7152189d82
commit a2fc8f405c
3 changed files with 29 additions and 8 deletions

View file

@ -4,7 +4,7 @@ BOOLEAN:OBJECT,UINT
BOOLEAN:VOID BOOLEAN:VOID
OBJECT:OBJECT OBJECT:OBJECT
VOID:BOOLEAN,STRING VOID:BOOLEAN,STRING
VOID:OBJECT,ENUM VOID:OBJECT,ENUM,BOOLEAN
VOID:OBJECT,INT,INT VOID:OBJECT,INT,INT
VOID:POINTER,INT VOID:POINTER,INT
VOID:STRING,BOOLEAN VOID:STRING,BOOLEAN

View file

@ -1325,6 +1325,7 @@ static void
midori_view_new_view_cb (GtkWidget* view, midori_view_new_view_cb (GtkWidget* view,
GtkWidget* new_view, GtkWidget* new_view,
MidoriNewView where, MidoriNewView where,
gboolean user_initiated,
MidoriBrowser* browser) MidoriBrowser* browser)
{ {
midori_browser_view_copy_history (new_view, view, TRUE); midori_browser_view_copy_history (new_view, view, TRUE);
@ -1341,6 +1342,22 @@ midori_view_new_view_cb (GtkWidget* view,
if (where != MIDORI_NEW_VIEW_BACKGROUND) if (where != MIDORI_NEW_VIEW_BACKGROUND)
midori_browser_set_current_page (browser, n); midori_browser_set_current_page (browser, n);
} }
if (!user_initiated)
{
GdkWindow* window = gtk_widget_get_window (GTK_WIDGET (browser));
GdkWindowState state = gdk_window_get_state (window);
if ((state | GDK_WINDOW_STATE_MAXIMIZED)
|| (state | GDK_WINDOW_STATE_FULLSCREEN))
{
if (where == MIDORI_NEW_VIEW_WINDOW)
g_signal_emit (browser, signals[SEND_NOTIFICATION], 0,
_("New Window"), _("A new window has been opened"));
else if (!browser->show_tabs)
g_signal_emit (browser, signals[SEND_NOTIFICATION], 0,
_("New Tab"), _("A new tab has been opened"));
}
}
} }
#if WEBKIT_CHECK_VERSION (1, 1, 3) #if WEBKIT_CHECK_VERSION (1, 1, 3)
@ -1817,7 +1834,7 @@ midori_browser_class_init (MidoriBrowserClass* class)
* @message: the message for the notification * @message: the message for the notification
* *
* Emitted when a browser wants to display a notification message, * Emitted when a browser wants to display a notification message,
* e.g. when a download has been completed. * e.g. when a download has been completed or a new tab was opened.
* *
* Since: 0.1.7 * Since: 0.1.7
*/ */
@ -4544,7 +4561,7 @@ _action_tab_duplicate_activate (GtkAction* action,
GtkWidget* new_view = midori_view_new_with_title ( GtkWidget* new_view = midori_view_new_with_title (
NULL, browser->settings, FALSE); NULL, browser->settings, FALSE);
const gchar* uri = midori_view_get_display_uri (MIDORI_VIEW (view)); const gchar* uri = midori_view_get_display_uri (MIDORI_VIEW (view));
g_signal_emit_by_name (view, "new-view", new_view, where); g_signal_emit_by_name (view, "new-view", new_view, where, TRUE);
midori_view_set_uri (MIDORI_VIEW (new_view), uri); midori_view_set_uri (MIDORI_VIEW (new_view), uri);
} }

View file

@ -337,12 +337,15 @@ midori_view_class_init (MidoriViewClass* class)
* @view: the object on which the signal is emitted * @view: the object on which the signal is emitted
* @new_view: a newly created view * @new_view: a newly created view
* @where: where to open the view * @where: where to open the view
* @user_initiated: %TRUE if the user actively opened the new view
* *
* Emitted when a new view is created. The value of * Emitted when a new view is created. The value of
* @where determines where to open the view according * @where determines where to open the view according
* to how it was opened and user preferences. * to how it was opened and user preferences.
* *
* Since: 0.1.2 * Since: 0.1.2
*
* Since 0.3.4 a boolean argument was added.
*/ */
signals[NEW_VIEW] = g_signal_new ( signals[NEW_VIEW] = g_signal_new (
"new-view", "new-view",
@ -351,10 +354,11 @@ midori_view_class_init (MidoriViewClass* class)
0, 0,
0, 0,
NULL, NULL,
midori_cclosure_marshal_VOID__OBJECT_ENUM, midori_cclosure_marshal_VOID__OBJECT_ENUM_BOOLEAN,
G_TYPE_NONE, 2, G_TYPE_NONE, 3,
MIDORI_TYPE_VIEW, MIDORI_TYPE_VIEW,
MIDORI_TYPE_NEW_VIEW); MIDORI_TYPE_NEW_VIEW,
G_TYPE_BOOLEAN);
/** /**
* MidoriView::download-requested: * MidoriView::download-requested:
@ -2885,7 +2889,7 @@ webkit_web_view_web_view_ready_cb (GtkWidget* web_view,
where = MIDORI_NEW_VIEW_WINDOW; where = MIDORI_NEW_VIEW_WINDOW;
gtk_widget_show (new_view); gtk_widget_show (new_view);
g_signal_emit (view, signals[NEW_VIEW], 0, new_view, where); g_signal_emit (view, signals[NEW_VIEW], 0, new_view, where, FALSE);
return TRUE; return TRUE;
} }
@ -4607,7 +4611,7 @@ midori_view_tab_label_menu_duplicate_tab_cb (GtkWidget* menuitem,
GtkWidget* new_view = midori_view_new_with_title ( GtkWidget* new_view = midori_view_new_with_title (
NULL, view->settings, FALSE); NULL, view->settings, FALSE);
const gchar* uri = midori_view_get_display_uri (MIDORI_VIEW (view)); const gchar* uri = midori_view_get_display_uri (MIDORI_VIEW (view));
g_signal_emit (view, signals[NEW_VIEW], 0, new_view, where); g_signal_emit (view, signals[NEW_VIEW], 0, new_view, where, TRUE);
midori_view_set_uri (MIDORI_VIEW (new_view), uri); midori_view_set_uri (MIDORI_VIEW (new_view), uri);
} }