Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Не могу заставить метод deiconify() работать.  (Прочитано 607 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн leonmaxx

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Привет ребят.

Пишу приложение для Убунты и Юнити. Использую C++ и Gtkmm, также я использую libappindicator для иконки в трее, с простым присоединённым меню: Show, Hide которое должно прятать окно и возвращать обратно.
Вот собственно часть кода:

class CMainWindow: public Gtk::Window {
...
    Glib::RefPtr<Gtk::StyleContext>     m_rStyle;
    Glib::RefPtr<Gtk::UIManager>        m_rUIManager;
    Glib::RefPtr<Gtk::ActionGroup>      m_rActionGroup;
...
public:
...
    void                TrayInit();
    void                TrayWinShow();
    void                TrayWinExit();
...
};

// this method is called from CMainWindow constructor
void CMainWindow::TrayInit() {
    m_rActionGroup = Gtk::ActionGroup::create();

    m_rActionGroup->add(Gtk::Action::create("Show", "Show"),
        sigc::mem_fun(*this, &CMainWindow::TrayWinShow));
    m_rActionGroup->add(Gtk::Action::create("Hide", "Hide"),
        sigc::mem_fun(*this, &CMainWindow::TrayWinHide));

    m_rUIManager = Gtk::UIManager::create();
    m_rUIManager->insert_action_group(m_rActionGroup);
    add_accel_group(m_rUIManager->get_accel_group());

    Glib::ustring strUI =
            "<ui>"
            "  <popup name='IndicatorPopup'>"
                "    <menuitem action='Show' />"
            "    <menuitem action='Hide' />"
            "  </popup>"
            "</ui>";

    m_rUIManager->add_ui_from_string(strUI);

    Gtk::Widget *pWidget;
    pWidget = m_rUIManager->get_widget("/ui/IndicatorPopup");

    m_pAppIcon = app_indicator_new("sample", "sample_icon",
        APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
    app_indicator_set_status(m_pAppIcon, APP_INDICATOR_STATUS_ACTIVE);
    app_indicator_set_menu(m_pAppIcon, GTK_MENU(pWidget->gobj()));
}

void CMainWindow::TrayWinShow() {
    deiconify();
}

void CMainWindow::TrayWinHide() {
    iconify();
}

Так вот, правильно работает только iconify() - окно прячется на панэль, deiconify() - не делает ничего, окно остаётся на панэли. Код отлаживал, deiconify() исполняется, но ничего не происходит.

Так же пробовал вариант с методами show()/hide():

void CMainWindow::TrayWinShow() {
    show();
    get_application()->release();
}

void CMainWindow::TrayWinHide() {
    get_application()->hold();
    hide();
}

В єтом варианте окно прячется (даже с панели), но при вызове show() - получаю segfault.

Кто нибудь подскажет в какую сторону копать?

 

Страница сгенерирована за 0.02 секунд. Запросов: 22.