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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: отключить обработчик события в GTK+  (Прочитано 1175 раз)

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

Оффлайн S9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
  • Волшебник
    • Просмотр профиля
Всем добра! столкнулся с такой проблемой:
есть, допустим два Entry. И хочу, чтобы при вводе в первый Entry результат отображался во втором Entry, и когда ввожу что-нибудь во второй Entry результат отображался в первом.
Как так сделать?
У меня сейчас, как понял, запись ввида
Код: (vala) [Выделить]
entry1.changed.disconnect(changed_entry1_callback);ничего не отключает от entry1
Код: (vala) [Выделить]
/** файл gui.vala */
namespace GUI

  public Entry entry1;
  public Entry entry2;
 
  public class LayoutWidgets : Window
  { 
    public LayoutWidgets.create_gui()
    {
      /** тут создалось окошко, расставились виджеты и пр. дела сделались */
      ****
      /** делаю на текстовые поля обработчики событий */
      entry1.changed.connect(changed_entry1_callback);
      entry2.changed.connect(changed_entry2_callback);
      ****   
    }
  }   
}

/** файл callback.vala */
namespace Callback
{
  public static void changed_entry1_callback()
  {
    /** отключаем обработчик события changed у entry2, чтоб не мешал */
    entry2.changed.disconnect(changed_entry2_callback);
   
    ***
    делаю всякие полезные вещи
    ***
    /** подлючаем обработчик события changed у entry2, теперь ему можно работать */
    entry2.changed.connect(changed_entry2_callback);
  }
 
  public static void changed_entry2_callback()
  {
    /** отключаем обработчик события changed у entry1, чтоб не мешал */
    entry1.changed.disconnect(changed_entry1_callback);
   
    ***
    делаю всякие полезные вещи
    ***
    /** подлючаем обработчик события changed у entry1, теперь ему можно работать */
    entry1.changed.connect(changed_entry1_callback);
  }
}
где я мог ошибиться?
Burning on the flame
Played the waiting game

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #1 : 05 Марта 2015, 15:08:58 »
S9,https://wiki.gnome.org/Projects/Vala/GTKSample?highlight=%28%5CbVala%2FExamples%5Cb%29
(Нажмите, чтобы показать/скрыть)
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн S9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
  • Волшебник
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #2 : 05 Марта 2015, 15:53:01 »
alsoijw, нет, совсем не то.
adjustment - это не одно и тоже, что и changed.
вообщем, накидал пример, который описал в первом посте

если лень открывать его, то можно посмотреть код в спойлерах
(Нажмите, чтобы показать/скрыть)

(Нажмите, чтобы показать/скрыть)
(Нажмите, чтобы показать/скрыть)
Burning on the flame
Played the waiting game

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #3 : 05 Марта 2015, 16:14:35 »
S9, тебе функционал нужен? Замени тип объектов и всё. Ты хочешь готовый код? Долго ждать придётся.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн S9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
  • Волшебник
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #4 : 05 Марта 2015, 17:29:03 »
S9, тебе функционал нужен? Замени тип объектов и всё. Ты хочешь готовый код? Долго ждать придётся.
у Entry нет adjustment, т.к. в нём строка, а не число поэтому
adjustment - это не одно и тоже, что и changed.
для Entry adjustment не применим.
Объясняю на пальцах, что я хочу сделать.
у меня это
Код: (vala) [Выделить]
entry1.changed.disconnect(changed_entry1_callback);не запрещает обрабатывать сигнал changed. А я хочу запретить обработку этого сигнала.
т.е. я ввёл что-то в entry1, изменилось значения entry2. Т.к. при изменении значения entry2 обработался сигнал changed, изменился и entry1 (его изменил уже changed_entry2_callback())
Burning on the flame
Played the waiting game

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #5 : 05 Марта 2015, 18:10:23 »
S9, там есть свойство text и событие changed.
Этот код у тебя как работает?
(Нажмите, чтобы показать/скрыть)
Нажми на кнопку test1, потом test. Надпись на test изменилась?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн S9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
  • Волшебник
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #6 : 10 Марта 2015, 15:24:08 »
alsoijw, извиняюсь, что не написал вам сразу. Дело вот в чём.
Если пишу так (всё в одном файле)
(Нажмите, чтобы показать/скрыть)
то работает всё норм, как и ожидалось
* TEST ** INFO: Call entry1 callback

 * TEST ** INFO: Call entry2 callback

 * TEST ** INFO: Call entry1 callback

 * TEST ** INFO: Call entry2 callback
kirra@desktop:~/Документы/Doc/src/test$

(по очереди ввожу символы в entry1 и entry2)
Но если разбиваю пространства имён каждый в свой файл (namespace GUI в файл GUI.vala, namespace Callback в файл Callback.vala и т.п.) то получаю такую картину:
(Нажмите, чтобы показать/скрыть)

то получаю следующее (эксперимент аналогичен предыдущему):
* TEST ** INFO: Call entry2 callback

 * TEST ** INFO: Call entry1 callback

 * TEST ** INFO: Call entry1 callback

 * TEST ** INFO: Call entry2 callback

 * TEST ** INFO: Call entry2 callback

 * TEST ** INFO: Call entry1 callback

 * TEST ** INFO: Call entry1 callback

 * TEST ** INFO: Call entry2 callback
kirra@desktop:~/Документы/Doc/src/test$

т.е. при вводе в entry1 сначала обрабатывается сигнал chaged entry2 а потом уже changed entry1. На один ввод символа отрабатывают оба обработчика.
Почему так происходит?
P.S. Советовать писать всё в один файл и без пространств имён не надо, я не хочу чтобы исходники моих программ были похожи на упоротый быдлокод
Burning on the flame
Played the waiting game

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #7 : 10 Марта 2015, 16:27:02 »
S9, ничего не могу сказать. Это к разработчикам вопрос.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн man0ngi

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: отключить обработчик события в GTK+
« Ответ #8 : 13 Марта 2015, 13:24:51 »
где я мог ошибиться?
Использовать надо уникальный id типа ulong, который возвращает функция connect.
https://wiki.gnome.org/Projects/Vala/SignalsAndCallbacks

 

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