Index: linuxdcpp-1.0.3/linux/mainwindow.cc =================================================================== --- linuxdcpp-1.0.3.orig/linux/mainwindow.cc 2010-05-02 16:02:51.801641864 +0700 +++ linuxdcpp-1.0.3/linux/mainwindow.cc 2010-05-02 16:46:44.629637842 +0700 @@ -275,7 +275,7 @@ gtk_widget_destroy(getWidget("flistDialog")); gtk_widget_destroy(getWidget("aboutDialog")); gtk_widget_destroy(GTK_WIDGET(window)); - g_object_unref(statusIcon); + g_object_unref(indicator); // Make sure the pixmaps are freed (using gtk's ref counting). g_object_unref(G_OBJECT(uploadPic)); @@ -470,25 +470,22 @@ */ void MainWindow::createStatusIcon_gui() { - string iconPath = WulforManager::get()->getPath() + "/pixmaps/linuxdcpp-icon.png"; - statusIcon = gtk_status_icon_new_from_file(iconPath.c_str()); + GtkMenu *menu = GTK_MENU(getWidget("statusIconMenu")); + indicator = app_indicator_new("linuxdcpp", "dcpp-32", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); - g_signal_connect(getWidget("statusIconQuitItem"), "activate", G_CALLBACK(onQuitClicked_gui), (gpointer)this); + g_signal_connect(getWidget("statusIconQuitItem"), "activate", G_CALLBACK(gtk_main_quit), (gpointer)this); g_signal_connect(getWidget("statusIconToggleInterfaceItem"), "activate", G_CALLBACK(onToggleWindowVisibility_gui), (gpointer)this); - g_signal_connect(statusIcon, "activate", G_CALLBACK(onStatusIconActivated_gui), (gpointer)this); - g_signal_connect(statusIcon, "popup-menu", G_CALLBACK(onStatusIconPopupMenu_gui), (gpointer)this); + app_indicator_set_menu(indicator, menu); if (BOOLSETTING(MINIMIZE_TRAY)) - gtk_status_icon_set_visible(statusIcon, TRUE); + app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE); else - gtk_status_icon_set_visible(statusIcon, FALSE); + app_indicator_set_status(indicator, APP_INDICATOR_STATUS_PASSIVE); } void MainWindow::updateStatusIconTooltip_gui(string download, string upload) { - ostringstream toolTip; - toolTip << g_get_application_name() << endl << _("Download: ") << download << endl << _("Upload: ") << upload; - gtk_status_icon_set_tooltip(statusIcon, toolTip.str().c_str()); + // Do nothing with the indicator API } void MainWindow::setMainStatus_gui(string text, time_t t) @@ -1116,9 +1113,9 @@ } if (BOOLSETTING(MINIMIZE_TRAY)) - gtk_status_icon_set_visible(mw->statusIcon, TRUE); + app_indicator_set_status(mw->indicator, APP_INDICATOR_STATUS_ACTIVE); else - gtk_status_icon_set_visible(mw->statusIcon, FALSE); + app_indicator_set_status(mw->indicator, APP_INDICATOR_STATUS_PASSIVE); mw->setTabPosition_gui(WGETI("tab-position")); mw->setToolbarStyle_gui(WGETI("toolbar-style")); @@ -1471,9 +1468,7 @@ void MainWindow::onStatusIconPopupMenu_gui(GtkStatusIcon *statusIcon, guint button, guint time, gpointer data) { - MainWindow *mw = (MainWindow *)data; - GtkMenu *menu = GTK_MENU(mw->getWidget("statusIconMenu")); - gtk_menu_popup(menu, NULL, NULL, gtk_status_icon_position_menu, statusIcon, button, time); + // Do nothing with the indicator API } void MainWindow::onToggleWindowVisibility_gui(GtkMenuItem *item, gpointer data) Index: linuxdcpp-1.0.3/linux/mainwindow.hh =================================================================== --- linuxdcpp-1.0.3.orig/linux/mainwindow.hh 2010-05-02 16:02:51.749636660 +0700 +++ linuxdcpp-1.0.3/linux/mainwindow.hh 2010-05-02 16:04:30.721637137 +0700 @@ -30,6 +30,7 @@ #include #include #include +#include #include "entry.hh" #include "treeview.hh" @@ -177,7 +178,7 @@ GtkListStore *transferStore; GtkTreeSelection *transferSelection; GdkPixbuf *uploadPic, *downloadPic; - GtkStatusIcon *statusIcon; + AppIndicator *indicator; int64_t lastUpdate, lastUp, lastDown; int emptyStatusWidth; bool minimized; Index: linuxdcpp-1.0.3/SConstruct =================================================================== --- linuxdcpp-1.0.3.orig/SConstruct 2010-05-02 16:02:51.709640334 +0700 +++ linuxdcpp-1.0.3/SConstruct 2010-05-02 16:04:30.721637137 +0700 @@ -126,6 +126,11 @@ print '\tNote: You might have the lib but not the headers' Exit(1) + if not conf.CheckPKG('appindicator-0.1 >= 0.0.19'): + print '\tappindicator-0.1 >= 0.0.19 not found.' + print '\tNote: You might have the lib but not the headers' + Exit(1) + if not conf.CheckHeader('time.h'): Exit(1) @@ -207,7 +212,7 @@ env.ParseConfig('pkg-config --libs libglade-2.0') env.ParseConfig('pkg-config --libs gthread-2.0') - + env.ParseConfig('pkg-config --libs appindicator-0.1') # ---------------------------------------------------------------------- # Build Index: linuxdcpp-1.0.3/linux/SConstruct =================================================================== --- linuxdcpp-1.0.3.orig/linux/SConstruct 2010-05-02 16:02:51.769637102 +0700 +++ linuxdcpp-1.0.3/linux/SConstruct 2010-05-02 16:04:30.721637137 +0700 @@ -25,6 +25,7 @@ # Get the cflags. We copy the env since so we don't want to add these flags globally (scons bug?) env_gui = env.Clone() env_gui.ParseConfig('pkg-config --cflags libglade-2.0') +env_gui.ParseConfig('pkg-config --cflags appindicator-0.1') # Build the gui_files guiObjs = env_gui.Object(gui_files)