LINUX.ORG.RU

Сообщения Athor

 

TQ Anniversary фризится с GL_OUT_OF_MEMORY

Собственно сабж. Фризится регулярно, где-то раз в 5-10 минут. Игра c GOG, последний Wine с ArchLinux.
Видеокарта - Intel IvyBridge HD,
MESA 12.0.2-1
Wine 1.9.18
64-битный WINEPREFIX


Под фризом я понимаю полный фриз игры, когда помогает только killall -9 Tq.exe

 , ,

Athor
()

Пришлите XML с DBus интерфейса старого UPower (0.9.23)

Гентушники с OpenRC, сабж:)

 , ,

Athor
()

Обновление моего GlobalMenu для крыски и не только.

Мои программы обновились. Я пофиксил в них много утечек памяти, которые были связаны с кривизной рук. Что входит в мои программы:

  • GTK3-замена LXPanel
  • Плагин для показа StatusNotifierItem (это трей в KDE5) для моей панели и для крысы
  • Глобальное меню для моей панели и для крысы на технологиях Unity (но можно на стоковый GTK поставить)
  • Несколько юзабельных дополнений для StatusNotifierItem-трея, а именно:
    • Плагин громкости
    • Плагин батареи
    • Плагин раскладки
    • Плагин погоды
    • Плагин загрузки сети

Брать:

 , ,

Athor
()

Ебилды для всех.

Я веду оверлей lxde-gtk3 и сообщаю вам о том, что теперь там также есть firefox с USE=«gtk3» (собирается, работает, сам с него сижу)

Ну и lxde c gtk3, конечно. А также глобалменю для крыски. Если кто хочет, могу и для корицы заебилдить.

Кому надо?

 , ,

Athor
()

Что может течь в этих функциях?

    [Compact,CCode (ref_function = "menu_maker_drag_data_ref", unref_function = "menu_maker_drag_data_unref")]
    private class DragData
    {
        internal unowned MenuModel section;
        internal unowned Gtk.MenuItem menuitem;
        internal int item_pos;
        internal Volatile ref_count;
        internal static void destroy (Widget w, DragData data)
        {
            SignalHandler.disconnect_by_data(data.menuitem,data);
            Gtk.drag_source_unset(data.menuitem);
            data.ref_count = 1;
            data.unref();
        }
        internal DragData(Gtk.MenuItem item, MenuModel section, int model_item)
        {
            this.section = section;
            this.menuitem = item;
            item_pos = model_item;
            this.ref_count = 1;
        }
        internal void @get (Gdk.DragContext context, SelectionData data, uint info, uint time_)
        {
            string[]? uri_list = null;
            string action,target;
            section.get_item_attribute(item_pos,GLib.Menu.ATTRIBUTE_ACTION,"s",out action);
            section.get_item_attribute(item_pos,GLib.Menu.ATTRIBUTE_TARGET,"s",out target);
            if (action == "app.launch-id")
            {
                try
                {
                    var appinfo = new DesktopAppInfo(target);
                    target = Filename.to_uri(appinfo.get_filename());
                } catch (GLib.Error e){}
            }
            uri_list = new string[1];
            uri_list[0] = target;
            data.set_uris(uri_list);
        }
        internal void begin(Gdk.DragContext context)
        {
            var val = section.get_item_attribute_value(item_pos,GLib.Menu.ATTRIBUTE_ICON,null);
            var icon = Icon.deserialize(val);
            if (icon != null)
                Gtk.drag_source_set_icon_gicon(menuitem,icon);
            else
                Gtk.drag_source_set_icon_name(menuitem,"system-run-symbolic");
        }
        internal unowned DragData @ref ()
        {
            GLib.AtomicInt.inc (ref this.ref_count);
            return this;
        }
        internal void unref ()
        {
            if (GLib.AtomicInt.dec_and_test (ref this.ref_count))
                this.free ();
        }
        private extern void free ();
    }

    private static void apply_menu_dnd(Gtk.MenuItem item, MenuModel section, int model_item)
    {
        // Make the this widget a DnD source.
        Gtk.drag_source_set (
                item,                      // widget will be drag-able
                Gdk.ModifierType.BUTTON1_MASK, // modifier that will start a drag
                MENU_TARGETS,               // lists of target to support
                Gdk.DragAction.COPY            // what to do with data after dropped
            );
        var data = new DragData(item,section,model_item);
        data.ref();
        item.drag_begin.connect(data.begin);
        item.drag_data_get.connect(data.get);
        Signal.connect(item,"destroy",(GLib.Callback)DragData.destroy,data);
    }
    public static void apply_menu_properties(List<unowned Widget> w, MenuModel menu)
    {
        unowned List<unowned Widget> l = w;
        for(var i = 0; i < menu.get_n_items(); i++)
        {
            var jumplen = 1;
            if (l.data is SeparatorMenuItem) l = l.next;
            unowned Gtk.MenuItem shell = l.data as Gtk.MenuItem;
            unowned string? str = null;
            var has_section = false;
            var has_submenu = false;
            unowned MenuShell menuw = shell.submenu;
            MenuLinkIter iter = menu.iterate_item_links(i);
            MenuModel? link_menu;
            while (iter.get_next(out str, out link_menu))
            {
                has_section = has_section || (str == GLib.Menu.LINK_SECTION);
                has_submenu = has_submenu || (str == GLib.Menu.LINK_SUBMENU);
                if (menuw != null && has_submenu)
                    apply_menu_properties(menuw.get_children(),link_menu);
                else if (has_section)
                {
                    jumplen += (link_menu.get_n_items() - 1);
                    apply_menu_properties(l,link_menu);
                }
            }
            Variant? val = null;
            MenuAttributeIter attr_iter = menu.iterate_item_attributes(i);
            while(attr_iter.get_next(out str,out val))
            {
                if (str == GLib.Menu.ATTRIBUTE_ICON && (has_submenu || has_section))
                {
                    var icon = Icon.deserialize(val);
                    shell.set("icon",icon);
                }
                if (str == ATTRIBUTE_TOOLTIP)
                    shell.set_tooltip_text(val.get_string());
                if (str == ATTRIBUTE_DND_SOURCE && val.get_boolean())
                    apply_menu_dnd(l.data as Gtk.MenuItem, menu, i);
            }
            l = l.nth(jumplen);
            if (l == null) break;
        }
    }

 , , ,

Athor
()

Продолжение эпопеи поиска memleaks

Как понимать и фиксить вот такой выхлоп Valgrind?

==28104== 36,480 (15,360 direct, 21,120 indirect) bytes in 60 blocks are definitely lost in loss record 25,222 of 25,306
==28104==    at 0x4C2C080: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==28104==    by 0x782C6F1: g_malloc0 (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x78155A7: g_hash_table_resize (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x7815C8E: g_hash_table_insert_node (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x7815DC5: g_hash_table_insert_internal (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x7B0AC7F: dbus_menu_property_store_new (dbusmenu.vala:81)
==28104==    by 0x7B0B109: dbus_menu_item_construct (dbusmenu.vala:139)
==28104==    by 0x7B0CDF0: dbus_menu_client_parse_layout (dbusmenu.vala:349)
==28104==    by 0x7B0CD63: dbus_menu_client_parse_layout (dbusmenu.vala:313)
==28104==    by 0x7B0D520: dbus_menu_client_layout_update_co (dbusmenu.vala:293)
==28104==    by 0x7B0DA90: dbus_menu_client_construct (dbusmenu.vala:243)
==28104==    by 0x7B11632: dbus_menu_gtk_client_construct (dbusmenu.vala:1036)
==28104==    by 0x16F03E02: status_notifier_item_setup_inner_menu (snitem.vala:233)
==28104==    by 0x16F03E02: status_notifier_item_init_proxy_co (snitem.vala:115)
==28104==    by 0x4EA95C6: g_simple_async_result_complete (in /usr/lib/libgio-2.0.so.0.4400.0)
==28104==    by 0x4EA9628: complete_in_idle_cb (in /usr/lib/libgio-2.0.so.0.4400.0)
==28104==    by 0x7826C0C: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x7826FA7: g_main_context_iterate.isra.29 (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x782704B: g_main_context_iteration (in /usr/lib/libglib-2.0.so.0.4400.0)
==28104==    by 0x4EDC99B: g_application_run (in /usr/lib/libgio-2.0.so.0.4400.0)
==28104==    by 0x407365: vala_panel_main (application.vala:38)
==28104==    by 0x80597FF: (below main) (in /usr/lib/libc-2.21.so)
==28104== 
То есть, я понимаю, где оно создается, но там есть чертов деструктор и он вызывается, однако (проверено добавлением в него printf)

 , , ,

Athor
()

Не знаю, как поймать утечки памяти.

Уже все перепробовал - и Valgrind, и просто в htop смотреть, но утечки все равно поймать не могу, а они меня очень смущают. Как их точно выловить досконально?

Дело усложняется тем, что пишу я на Vala, а там в норме память скрыта от юзера. И непонятно, что и где течет.

 , ,

Athor
()

От чего может течь 4 мб?

Код:

    public bool show_menu()
    {
        if (GLib.MainContext.current_source().is_destroyed()) return false;
        Gtk.Menu menuw = new Gtk.Menu.from_model(menu);
        MenuMaker.apply_menu_properties(menuw.get_children(),menu);
        menuw.attach_to_widget(this,null);
        menuw.popup(null,null,menu_position_func,
                    0, Gdk.CURRENT_TIME);
        menuw.focus_out_event.connect((event)=>{menuw.destroy();return false;});
        show_system_menu_idle = 0;
        return false;
    }

Течет где-то либо в этой функции, либо во внутренностях. Но факт тот, что после ее выполнение занятая память увеличивается на 4 мб. И не освобождается потом совсем.

 , ,

Athor
()

Это GTK решето что ли? Или я криворукий зело?

==29320== 4,176 (512 direct, 3,664 indirect) bytes in 1 blocks are definitely lost in loss record 21,097 of 21,732
==29320==    at 0x4C2C29E: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==29320==    by 0x9B8FCFA: ??? (in /usr/lib/libfontconfig.so.1.9.0)
==29320==    by 0x9B904C9: ??? (in /usr/lib/libfontconfig.so.1.9.0)
==29320==    by 0x9B907EF: FcPatternAddInteger (in /usr/lib/libfontconfig.so.1.9.0)
==29320==    by 0x6D85281: ??? (in /usr/lib/libcairo.so.2.11400.2)
==29320==    by 0x643844F: ??? (in /usr/lib/libpangocairo-1.0.so.0.3600.8)
==29320==    by 0x9967871: ??? (in /usr/lib/libpangoft2-1.0.so.0.3600.8)
==29320==    by 0x996646C: ??? (in /usr/lib/libpangoft2-1.0.so.0.3600.8)
==29320==    by 0x665915E: ??? (in /usr/lib/libpango-1.0.so.0.3600.8)
==29320==    by 0x665C9CE: pango_layout_line_get_extents (in /usr/lib/libpango-1.0.so.0.3600.8)
==29320==    by 0x665EBEE: ??? (in /usr/lib/libpango-1.0.so.0.3600.8)
==29320==    by 0x665EE99: ??? (in /usr/lib/libpango-1.0.so.0.3600.8)
==29320==    by 0x5A75B33: gtk_label_get_preferred_layout_size (gtklabel.c:3661)
==29320==    by 0x5A75B33: gtk_label_get_preferred_size (gtklabel.c:3718)
==29320==    by 0x5A76084: gtk_label_get_preferred_height_and_baseline_for_width (gtklabel.c:3923)
==29320==    by 0x5B14013: gtk_widget_query_size_for_orientation (gtksizerequest.c:214)
==29320==    by 0x5B1426E: gtk_widget_compute_size_for_orientation (gtksizerequest.c:390)
==29320==    by 0x5B1454D: gtk_widget_get_preferred_height_and_baseline_for_width (gtksizerequest.c:639)
==29320==    by 0x59314C0: gtk_alignment_get_preferred_size (gtkalignment.c:662)
==29320==    by 0x59314FA: gtk_alignment_get_preferred_height_and_baseline_for_width (gtkalignment.c:737)
==29320==    by 0x5B14013: gtk_widget_query_size_for_orientation (gtksizerequest.c:214)

Хотя я нигде не переопределял gtk_widget_get_preferred_*...

 , , ,

Athor
()

После закрытия меню перестает тащиться иконка

В-общем, настроил я по мануалу таскающиеся иконки на меню, но вот незадача - пока меню на экране, иконка тащится, а как меню пропало - иконка не тащится. Как победить?

 ,

Athor
()

g_desktop_app_info_launch_uris_as_manager и nohup.

Как можно подружить эти сущности? Хочу, чтоб порожденные процессы не умирали, когда умирает родитель.

g_desktop_app_info_launch_uris_as_manager внутри вызывает g_spawn_async.

 , ,

Athor
()

Сколько памяти должна есть панелька?

Сабж. На данный момент моя ест 14 мб чистыми + 30 мб SHR. Система: Gentoo x86_64. Для сравнения - PCManFM на такой же системе ест 14 мб чистыми + 22 мб SHR

Много ли это? Если да, то почему? Если нет, то почему переписыванием LXDE на GTK3 занимаюсь я, а не разрабы LXDE?

И сколько памяти вы, ЛОРовцы, готовы отдать на своем компе обычной десктопной панели?

 , , ,

Athor
()

Не было печали, купил мышу.

История такая - купил себе BT мышу, чтоб погамать в Civ5 или в 5 героев под Wine. Сама мышь - китайская NONAME (BTC какая-то)

Но bluez хочет от меня пароль, а на мыше не написан сей. Как победить? 0000 и 1234 пробовал - без толку.

ArchLinux, bluez5 (5.30.1).

модель мыши

 , , ,

Athor
()

Апгрейдов псто v2

Кому надо мои программы попробовать под Ubuntu/Debian, идет сюда:

deb http://ppa.launchpad.net/rilian-la-te/vala-panel/ubuntu <version> main 
deb-src http://ppa.launchpad.net/rilian-la-te/vala-panel/ubuntu <version> main 
deb http://ppa.launchpad.net/rilian-la-te/vala-panel-plugins/ubuntu <version> main 
deb-src http://ppa.launchpad.net/rilian-la-te/vala-panel-plugins/ubuntu <version> main 

Есть 14.10 и 15.04. Под 14.10 не проверялось.

 , , , ,

Athor
()

Странности CMake

Есть вот это:

    target_link_libraries (appmenu-xfce ${CORE_LIBRARIES} ${WNCK_LIBRARIES} ${XFCE_LIBRALIES} m)
Но при этом
message ("${XFCE_FOUND} ${XFCE_LIBRALIES}")
дает
1 

Куда делись найденные крысолибы, с которыми надо слинковаться?:)

 ,

Athor
()

Странная проблема с SVG

Есть такой SVG файл. В генте он не открывается, арч его парсит корректо. В чем может быть причина?

Если конкретнее - то эти флаги я использую в качестве GIcon (для индикатора раскладки). В Арче все ок, в Gentoo же этот и несколько других (не все) SVG не кажутся. В GPicView (как я подозреваю, она тот же бэкенд юзает) - такие же траблы. Собрал EOG - все показывает и в генте.

Короче, путем тыка выяснено, что не работают SVG, в которых есть

<!--

<rdf:RDF xmlns="http://web.resource.org/cc/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="">
   <dc:title>SVG graphic of Afghanistan's Flag</dc:title>
   <dc:rights><Agent>
      <dc:title>Andrew Duhan</dc:title>
   </Agent></dc:rights>
   <license rdf:resource="http://web.resource.org/cc/PublicDomain" />
</Work>

<License rdf:about="http://web.resource.org/cc/PublicDomain">
   <permits rdf:resource="http://web.resource.org/cc/Reproduction" />
   <permits rdf:resource="http://web.resource.org/cc/Distribution" />
   <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</License>

</rdf:RDF>

-->

 , , , ,

Athor
()

Кто хотит ебилдов?

Вот тут появились ебилды к моим программам. Также там есть отредактированные ебилды lxde с USE=gtk3 (для тех, кто хочет gtk3 lxde).

 , , ,

Athor
()

Напишите мне debian package

Напишите мне debian package для моих программ, пожалуйста, кому не сложно. Я дебиан и убунту не использую.

 , ,

Athor
()

Хочу версию из гита

Юзаю вот что:

include(GetGitRevisionDescription)
git_describe(VERSION_LONG)

#parse the version information into pieces.
string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION_LONG}")
string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION_LONG}")
string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION_LONG}")
string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_SHA1 "${VERSION_LONG}")
set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")

git_describe возвращает в CMake вывод git describe. Возвращает верно. Но при этом в VERSION лежит не распарсенный вывод, а тупо утроенная VERSION_LONG. Как фиксить?

 , ,

Athor
()

Апгрейдов псто

Мои программы получили очередное обновление:

  • Исправлены баги
  • В extras добавлен апплет загрузки сети.

По прежнему: брать тут, AUR тут

 , , , ,

Athor
()

RSS подписка на новые темы