abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:33 | Nová verze

    Desktopové prostředí Budgie bylo vydáno ve verzi 10.10. Dokončena byla migrace z X11 na Wayland. Budgie 10 vstupuje do režimu údržby. Vývoj se přesouvá k Budgie 11. Dlouho se řešilo, v čem bude nové Budgie napsáno. Budgie 10 je postaveno nad GTK 3. Přemýšlelo se také nad přepsáním z GTK do EFL. Budgie 11 bude nakonec postaveno nad Qt 6.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Humor

    OpenChaos.dev je 'samovolně se vyvíjející open source projekt' s nedefinovaným cílem. Každý týden mohou lidé hlasovat o návrzích (pull requestech), přičemž vítězný návrh se integruje do kódu projektu (repozitář na GitHubu). Hlasováním je možné změnit téměř vše, včetně tohoto pravidla. Hlasování končí vždy v neděli v 9:00 UTC.

    NUKE GAZA! 🎆 | Komentářů: 2
    včera 03:00 | Nová verze

    Byl vydán Debian 13.3, tj. třetí opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.13, tj. třináctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

    Ladislav Hagara | Komentářů: 0
    10.1. 03:00 | Komunita

    Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.

    Ladislav Hagara | Komentářů: 6
    9.1. 19:44 | Zajímavý software

    Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.

    Ladislav Hagara | Komentářů: 5
    9.1. 19:11 | IT novinky

    Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).

    NUKE GAZA! 🎆 | Komentářů: 2
    9.1. 14:22 | Zajímavý článek

    Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.

    Ladislav Hagara | Komentářů: 7
    9.1. 03:33 | Zajímavý software

    AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.

    Ladislav Hagara | Komentářů: 1
    9.1. 00:11 | Nová verze

    Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    8.1. 20:44 | IT novinky

    Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou

    … více »
    NUKE GAZA! 🎆 | Komentářů: 15
    Které desktopové prostředí na Linuxu používáte?
     (8%)
     (4%)
     (0%)
     (9%)
     (20%)
     (3%)
     (5%)
     (3%)
     (10%)
     (50%)
    Celkem 374 hlasů
     Komentářů: 8, poslední 10.1. 23:18
    Rozcestník

    Vala a buttonek s menu

    3.1.2009 19:34 | Přečteno: 1236× | Jiné

    Dnes objevil sem zajímavý programovací jazyk jménem Vala. Je trochu podobný C# a má vcelku jednu zajímavou vlastnost - umí generovat C kód (sice je místy trošku ošklivější) a ten pak ptohání gcc. Výsledný program je pak, narozdíl od C#, rychlý. A jelikož jsem nedávno dělal buttonek, přepsal jsem ho do tohoto jazyka.

    Šlo to docela dobře, až na špatné "vapi" pro Gtk.Container.forall, takže je v souboru gtk+-2.0.vapi (obvykle v /usr/share/vala/vapi) nutno upravit argumenty z "Gtk.Callback callback" na "bool include_internals, Gtk.Callback callback" (někdo může nahlásit bug jestli není, mně se nechce). Kvůli téhle chybě mi to pořád padalo na SIGSEGV a když jsem tu metodu nepřekryl, tak mi to nechtělo kreslit buttonek a já se s tím tak dlouho trápil ...

    MenuButton.vala:

    using Gtk;
    
    public class Controls.MenuButton: Gtk.Container
    {
    	weak Gtk.Widget  _button_widget;
    	Gtk.Menu?        _menu;
    	Gtk.HBox         box;
    	Gtk.Arrow?       arrow;
    	Gtk.Alignment?   alignment;
    	Gtk.ToggleButton toggle_button;
    	weak Gtk.Widget  size_widget;
    	
    	construct
    	{	
    		set_flags (WidgetFlags.NO_WINDOW);
    		
    		_button_widget = null;
    		_menu = null;
    		arrow = null;
    		alignment = null;
    		
    		toggle_button = new ToggleButton ();
    		box = new HBox (false, 0);		
    		
    		toggle_button.set_parent (this);
    		box.set_parent (this);
    		
    		toggle_button.set_focus_on_click (false);
    		toggle_button.set_relief (ReliefStyle.NONE);
    		toggle_button.activate += on_toggle_activated;
    		toggle_button.button_press_event += on_toggle_press_event;
    		
    		toggle_button.show ();
    		box.show ();
    		
    		size_widget = toggle_button;
    	}
    	
    	public MenuButton ()
    	{
    		show_arrow = true;
    	}
    	
    	public void remove_button_widget ()
    	{
    		if (_button_widget == null) return;
    		
    		if (arrow != null)
    		{
    			box.remove (_button_widget);
    		}
    		else
    		{
    			toggle_button.remove (_button_widget);
    		}
    		_button_widget = null;
    	}
    	
    	public Widget? button_widget
    	{
    		get { return _button_widget; }
    		set {
    			remove_button_widget ();
    			
    			if (value != null)
    			{
    				_button_widget = value;
    				if (arrow != null)
    				{
    					box.pack_start (_button_widget, true, true, 0);
    				}
    				else
    				{
    					toggle_button.add (_button_widget);
    				}
    			}
    		}
    	}
    	
    	public bool show_arrow
    	{
    		get { return (arrow != null); }
    		set {
    			if (value)
    			{
    				if (arrow == null)
    				{
    					arrow = new Arrow (ArrowType.DOWN, ShadowType.NONE);
    					alignment = new Alignment (0.0f, 0.5f, 0.0f, 0.0f);
    					alignment.add (arrow);
    					arrow.show ();
    					alignment.show ();
    					box.pack_end (alignment, false, false, 5);
    			
    					if (_button_widget != null)
    					{
    						_button_widget.ref ();
    						toggle_button.remove (_button_widget);
    						box.pack_start (_button_widget, true, true, 0);
    						_button_widget.unref ();
    					}
    					size_widget = box;
    				}
    			}
    			else if (arrow != null)
    			{
    				box.remove (alignment);
    				arrow = null;
    				alignment = null;
    			
    				if (_button_widget != null)
    				{
    					_button_widget.ref ();
    					box.remove (_button_widget);
    					toggle_button.add (_button_widget);
    					_button_widget.unref ();
    				}
    				size_widget = toggle_button;
    			}
    		}
    	}
    	
    	private void menu_position_func (Menu menu, out int x, out int y, out bool push_in)
    	{
    		Requisition menu_req = Requisition ();
    		menu.size_request (out menu_req);
    		
    		Gdk.Screen screen;
    		
    		screen = get_screen ();
    		
    		int monitor_num = screen.get_monitor_at_window (window);
    		
    		Gdk.Rectangle monitor = Gdk.Rectangle ();
    		screen.get_monitor_geometry (monitor_num < 0 ? 0 : monitor_num, out monitor);
    		
    		window.get_origin (out x, out y);
    		
    		y += allocation.y;
    		x += allocation.x + int.max (allocation.width  - menu_req.width, 0);
    		
    		if (y + allocation.height + menu_req.height <= monitor.y + monitor.height)
    		{
    			y += allocation.height;
    		}
    		else if (y - menu_req.height >= monitor.y)
    		{
    			y -= menu_req.height;
    		}
    		else if (monitor.y + monitor.height - (y + allocation.height) > y)
    		{
    			y += allocation.height;
    		}
    		else
    		{
    			y -= menu_req.height;
    		}
    		push_in = false;
    	}
    	
    	private void show_menu ()
    	{
    		_menu.popup (null, null, menu_position_func, 0, get_current_event_time ());
    	}
    	
    	private bool on_toggle_press_event (ToggleButton? toggle, Gdk.EventButton? but)
    	{
    		if (but.button == 1)
    		{
    			if (_menu != null)
    			{
    				show_menu ();
    				toggle_button.set_active (true);
    			}
    			return true;
    		}
    		else return false;
    	}
    	
    	private void on_toggle_activated (ToggleButton? toggle)
    	{
    		show_menu ();
    	}
    	
    	private void on_menu_deactivate (Menu? menu)
    	{
    		toggle_button.set_active (false);
    	}
    	
    	public Menu? menu
    	{
    		get { return _menu; }
    		
    		set {
    			remove_menu ();
    			if (value != null)
    			{
    				_menu = value;
    				_menu.deactivate += on_menu_deactivate;
    			}
    		}
    	}
    	
    	public void remove_menu ()
    	{
    		if (_menu != null)
    		{
    			_menu.deactivate -= on_menu_deactivate;
    			_menu = null;
    		}
    	}
    	
    	public override void size_allocate (Gdk.Rectangle allocation)
    	{
    		box.size_allocate (allocation);
    		toggle_button.size_allocate (allocation);
    		base.size_allocate (allocation);
    	}
    	
    	public override void size_request (out Gtk.Requisition req)
    	{
    		size_widget.size_request (out req);
    	}
    	
    	public override void add (Widget w)
    	{
    	
    	}
    	
    	public override void remove (Widget w)
    	{
    	
    	}
    	
    	public override void forall (bool include_internals, Gtk.Callback cb)
    	{
    		cb (toggle_button);
    		cb (box);
    	}
    }
    
           

    Hodnocení: 71 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    vlastikroot avatar 3.1.2009 20:46 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu
    Výsledný program je pak, narozdíl od C#, rychlý.
    IMHO spis naopak, objektovy kod v C nemuze byt o moc rychlejsi nez v C# (oboji je runtime), zato treba C++ uz rychly je.
    We will destroys the Christian's legion ... and the cross, will be inverted
    3.1.2009 22:33 Zdenek
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu
    Objektovy kod v C je runtime? A jak se neco takoveho stane?
    vlastikroot avatar 3.1.2009 23:18 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu
    Kdyz beru v uvahu ze objektovy kod v C je napsany v Glib, tak je to vicemene runtime, podpora objektu je emulovana pres kupu ruznych funkci a struktur, misto optimalizovanych prekladu v C++.
    We will destroys the Christian's legion ... and the cross, will be inverted
    3.1.2009 23:35 Zdenek
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu
    To ale jen verite, ze programatori g++ jsou lepsi nez programatori glib :-)
    3.1.2009 23:45 Zdenek
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu
    Mno ale mate pravdu, minimalne hash table jsou opravdu v g++ lepsi.
    alblaho avatar 4.1.2009 10:44 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu

    Právě že předpokládá, že jsou dobřít řádově stejně. g++ je nástroj na statickou analýzu objektového kódu a generování efektivního strojáku. Znásilnit k něčemu takovému překladač plain C není možné.

    Jardík avatar 4.1.2009 13:33 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Vala a buttonek s menu

    Ale zase když v C++ budete používat virtuální metody a výjimky, tak to taky bude "runtime", takže ono to vyjde celkem na stejno.

    Věřím v jednoho Boha.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.