Eto: ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜ ์ปจํŠธ๋กค ์ถ”๊ฐ€

์— ๋งŒ๋“  2015๋…„ 03์›” 07์ผ  ยท  33์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: picoe/Eto

enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Wpf ๊ตฌํ˜„ ์™„๋ฃŒ:
wpf

๋ชจ๋“  33 ๋Œ“๊ธ€

์˜ˆ, .Net ํ”„๋ ˆ์ž„์›Œํฌ์— NotifyIcon ํด๋ž˜์Šค๊ฐ€ ์žˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

"๊ธฐ๋ณธ KDE ๋ฐ์Šคํฌํƒ‘์„ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ์ผ๋ฐ˜ NotifyIcon์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์•Œ๋ฆผ ์˜์—ญ ์• ํ”Œ๋ฆฟ์ด๋ผ๋Š” Gnome ํŒจ๋„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."
http://www.codeproject.com/Articles/466805/AmberIndicator-a-systray-app-under-Linux

"openSUSE, Fedora ๋ฐ Ubuntu์—์„œ NotifyIcon์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"
https://bugzilla.novell.com/show_bug.cgi?id=590093

"NotifyIcon์ด ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ OS: Fedora, Arch. DE: MATE, Cinnamon)"
https://bugzilla.xamarin.com/show_bug.cgi?id=14976

DBus์™€ ๋” ํ†ตํ•ฉ๋œ ๊ฒƒ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ์•Œ๋ฆผ ์˜์—ญ์— ์•„์ด์ฝ˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋œ ์„ฑ๊ฐ€์‹œ๋‹ค(๋Œ€ํ™” ์ƒ์ž๋Š” ํ˜„์žฌ ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ  ์•„์ด์ฝ˜์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ๋™์•ˆ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Œ). ๊ทธ๋Ÿฌ๋‚˜ ์•„์ด์ฝ˜๋„ ๋ˆˆ์— ๋„๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์ด ์ž‘์€ ๋ฉ”์‹œ์ง€ ํ’์„ ์„ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(ํ’์„ ์— ์ถœ์ž…๋ฌธ ์นด๋ฉ”๋ผ์˜ ์ด๋ฏธ์ง€๋‚˜ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฌธ์ž์—ด๋งŒ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?). ํŠนํžˆ, ์ด๋Š” ํ’์„ ์ด ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ์‚ฌ๋ผ์ง์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ Rigo ๊ด€๋ฆฌ์ž๊ฐ€ ์ž˜๋ชป - ์‚ฌ์šฉ์ž๊ฐ€ ํ’์„ ์„ ์ˆ˜๋™์œผ๋กœ ๋‹ซ์•„์•ผ ํ•จ).

DBus๋ฅผ ํ†ตํ•ด ํ†ตํ•ฉํ•˜๊ธฐ์— ์ข‹์€ _Workspace Switcher Applet_๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค - ๋‹ค๋ฅธ ์ž‘์—… ๊ณต๊ฐ„์— ๋‹ค๋ฅธ ๋ฌธ์„œ ์„ธํŠธ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•˜๋Š” MDI ํ”„๋กœ๊ทธ๋žจ. ์ž‘์—… ๊ณต๊ฐ„์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค - https://github.com/picoe/Eto/issues/409

"GNOME ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋Š” ์ˆ˜ํ‰ ๋˜๋Š” ์ˆ˜์ง์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค"

"์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋Š” ํ’์„  ๋ฉ”์‹œ์ง€๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ผ๊ด€๋œ ๋ชจ์–‘๊ณผ ๋Š๋‚Œ์„ ๊ฐ–๊ณ  ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ’์„  ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ... ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์—์„œ ๋ฉ”์‹œ์ง€์˜ ์ผ๋ถ€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•„์ˆ˜ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์˜ ์ฐฝ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์žฌ์กฐ๋ฆฝํ•˜๋ ค๋ฉด.... ํ’์„  ๋ฉ”์‹œ์ง€๋Š” ์งง์€ ๋ฌธ์ž ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ... ๋ฉ”์‹œ์ง€์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋งŒ๋ฃŒ๋œ ํ›„ ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ...ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์ด ์ด์ „์— ๋ณด๋‚ธ ํ’์„  ๋ฉ”์‹œ์ง€๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

์•Œ๋ฆผ ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋…ธ์˜ NotifyIcon

์ผ๋ถ€ URL:

  1. ๊ทธ๋†ˆ ํœด๋จผ ์ธํ„ฐํŽ˜์ด์Šค ์ง€์นจ 2.2.3 ๋ฐ์Šคํฌํƒ‘ ํ†ตํ•ฉ
    https://developer.gnome.org/hig-book/unstable/desktop-notification-area.html.en
  2. ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ํ”„๋กœํ† ์ฝœ ์‚ฌ์–‘
    http://standards.freedesktop.org/systemtray-spec/latest/
  3. ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ†ต์‹  ๊ทœ์น™ ๋งค๋‰ด์–ผ
    http://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html
  4. XEmbed ํ”„๋กœํ† ์ฝœ ์‚ฌ์–‘(ํฌ๋กœ์Šค ํˆดํ‚ท ์œ„์ ฏ ์ž„๋ฒ ๋”ฉ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ)
    http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html
  5. ํ™•์žฅ๋œ ์ฐฝ ๊ด€๋ฆฌ์ž ํžŒํŠธ
    http://standards.freedesktop.org/wm-spec/wm-spec-latest.html
  6. System.Windows.Forms.NotifyIcon(MSDN)
    https://msdn.microsoft.com/ru-ru/library/system.windows.forms.notifyicon%28v=vs.110%29.aspx
  7. ๋ชจ๋…ธ๋กœ NotifyIcon ๊ตฌํ˜„
    https://github.com/mono/mono/blob/ef380e3712af86ef7f8064fab19400523c7510c0/mcs/class/System.Windows.Forms/System.Windows.Forms/NotifyIcon.cs#L38
  8. ๋ชจ๋…ธ์˜ NotifyIcon์— ๋Œ€ํ•œ ์˜ˆ
    https://github.com/mono/winforms/blob/master/notifyicon/swf-notifyicon.cs
    https://github.com/mono/winforms/blob/master/notifyicon/swf-balloon.cs
  9. KeePass๋Š” NotifyIcon์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    http://sourceforge.net/p/keepass/bugs/1212/
  10. Gtk# ์˜ˆ์ œ
    http://www.mono-project.com/docs/gui/gtksharp/widgets/notification-icon/
    Gtk.StatusIcon
    http://askubuntu.com/questions/13197
    https://developer.gnome.org/gtk3/stable/GtkStatusIcon.html

GNOME HIG์— ๋”ฐ๋ฅด๋ฉด ํŒจ๋„์— ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
panels-and-area

ใ…. ํŒจ๋„ ์• ํ”Œ๋ฆฟ("Wanda-the-fish"์—์„œ ์™ผ์ชฝ์— ์žˆ์Œ)
๋น„. ์•Œ๋ฆผ ์˜์—ญ ์•„์ด์ฝ˜ (์•Œ๋ฆผ ํŒจ๋„ ์ž์ฒด๊ฐ€ ํŒจ๋„ ์•ฑ์œผ๋กœ ํŒจ๋„์— ์ถ”๊ฐ€๋จ)

Mono๋Š” X11 ์‚ฌ์–‘ ์œ„์— "์•Œ๋ฆผ ์˜์—ญ ์•„์ด์ฝ˜"์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค(Gtk# ์—†์ด ์ง์ ‘).

๋ชจ๋…ธ๋Š” ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ XplatUI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
SystrayAdd, SystrayRemove, SystrayChange, SystrayBalloon, SendMessage, SetForegroundWindow
https://github.com/mono/mono/blob/ef380e3712af86ef7f8064fab19400523c7510c0/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUI.cs#L1106-L1128
ํ†ตํ™”๊ฐ€ ํšŒ์›์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

 static XplatUIDriver driver;

์–ด๋–ค ์œ ํ˜•์ž…๋‹ˆ๊นŒ ??? MATE ํ™˜๊ฒฝ์šฉ.

์–ด๋–ค ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‹ค์Œ ์ค„์—์„œ ์„ ํƒ๋œ XplatUIX11์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUI.cs#L112

ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์€ ์ฐฝ์ž…๋‹ˆ๋‹ค

ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์€ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์— ๋‚ด์žฅ๋˜๋Š” ์ฐฝ์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ํด๋ž˜์Šค NotifyIconWindow : Form { ... // 57ํ–‰
๊ฐœ์ธ NotifyIconWindow ์ฐฝ; // 45ํ–‰
์ฐฝ = ์ƒˆ๋กœ์šด NotifyIconWindow(์ด); // 389ํ–‰
XplatUI.SystrayAdd(window.Handle, ํ…์ŠคํŠธ, ์•„์ด์ฝ˜, ํˆดํŒ ์ถœ๋ ฅ); // 524ํ–‰

๊ทธ๋ฆฌ๊ธฐ ๋ฌธ์ œ:
https://bugzilla.novell.com/show_bug.cgi?id=324237#c13
"64๋น„ํŠธ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์•„์ด์ฝ˜์ด ํŠธ๋ ˆ์ด์— ์ „ํ˜€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."

ํˆฌ๋ช…์„ฑ ๋ฌธ์ œ:
http://lists.ximian.com/pipermail/mono-winforms-list/2007-December/003173.html
๋ฌธ์ œ์˜ ์›์ธ์€ ๋ผ์ธ 189
(์ด๊ฒƒ์€ 8๋…„ ๋™์•ˆ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค)
๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ๋ฉ”์‹œ์ง€์˜ ์ฒจ๋ถ€ ํŒŒ์ผ์—๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ๋ณด์‹ญ์‹œ์˜ค
http://standards.freedesktop.org/systemtray-spec/latest/ar01s06.html

๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ ๋ฌธ์ œ:
http://mono.1490590.n4.nabble.com/NotifyIcon-and-ContextMenu-redrawing-issues-in-gnome-td1541474.html
https://bugzilla.novell.com/show_bug.cgi?id=324237
https://bugzilla.novell.com/show_bug.cgi?id=MONO81668

_NET_SYSTEM_TRAY_S

๊ด€๋ฆฌ์ž ์„ ํƒ์— ๋Œ€ํ•œ ๊ทœ์น™์€ ICCCM( http://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html#manager_selections )์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋Š” ์ฃผ์–ด์ง„ ํ™”๋ฉด์—์„œ ํŠน๋ณ„ํ•œ ๊ด€๋ฆฌ์ž ์„ ํƒ์„ ์†Œ์œ ํ•˜๋Š” X ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์— ์•„์ด์ฝ˜์„ ์ œ๊ณตํ•˜๋ ค๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋จผ์ € ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ด€๋ฆฌ์ž ์„ ํƒ์˜ ์†Œ์œ ์ž ์ฐฝ์„ ์š”์ฒญํ•˜์—ฌ.
๊ด€๋ฆฌ์ž ์„ ํƒ์— ์†Œ์œ ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ ์•Œ๋ฆผ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ICCCM(MANAGER ํด๋ผ์ด์–ธํŠธ ๋ฉ”์‹œ์ง€ ๊ฐ์‹œ)์— ์„ค๋ช…๋œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํƒ ์†Œ์œ ์ž ์ฐฝ์€ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฐฝ๊ณผ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ด€๋ฆฌ์ž ์„ ํƒ์€ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์„ ํฌํ•จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฐฝ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ). ๊ด€๋ฆฌ์ž ์„ ํƒ์ด ์†์‹ค๋˜๋ฉด ํŒŒ๊ธฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋Š” _NET_SYSTEM_TRAY_Sn์ด๋ผ๋Š” ๊ด€๋ฆฌ์ž ์„ ํƒ์„ ํš๋“ํ•ด์•ผ ํ•˜๋ฉฐ n์„ ํŠธ๋ ˆ์ด๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ™”๋ฉด ๋ฒˆํ˜ธ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs#L729

XGrabServer(DisplayHandle); SystrayMgrWindow = XGetSelectionOwner(DisplayHandle, _NET_SYSTEM_TRAY_S); XUngrabServer(DisplayHandle); XFlush(DisplayHandle);

  • https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms.X11Internal/X11Display.cs#L345

Xlib.XGrabServer (display); IntPtr SystrayMgrWindow = Xlib.XGetSelectionOwner (display, Atoms._NET_SYSTEM_TRAY_S); Xlib.XUngrabServer (display);

SYSTEM_TRAY_REQUEST_DOCK

๋ฉ”์‹œ์ง€ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
http://standards.freedesktop.org/systemtray-spec/latest/ar01s04.html
Xlib๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  X ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? XCB ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฐ‘์— ๊น”๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, C# ์ฝ”๋“œ์—์„œ "์™€์ด์–ด"๋กœ ์ง์ ‘?

https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs#L6259

    SendNetClientMessage(SystrayMgrWindow, _NET_SYSTEM_TRAY_OPCODE, IntPtr.Zero, (IntPtr)SystrayRequest.SYSTEM_TRAY_REQUEST_DOCK, hwnd.whole_window);

https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms.X11Internal/X11Display.cs#L413-L417

    SendNetClientMessage (SystrayMgrWindow,
        Atoms._NET_SYSTEM_TRAY_OPCODE,
        IntPtr.Zero,
        (IntPtr)SystrayRequest.SYSTEM_TRAY_REQUEST_DOCK,
        hwnd.WholeWindow);

ํŒจ๋„ ์• ํ”Œ๋ฆฟ์œผ๋กœ ์•„์ด์ฝ˜

https://en.wikipedia.org/wiki/D-๋ฒ„์Šค
D-BUS๋Š” IPC(ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ) ์‹œ์Šคํ…œ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋กœ ํ†ต์‹ ํ•˜๊ณ  ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
"D-BUS๋Š” ๋‘ ๋ฐ์Šคํฌํƒ‘(GNOME ๋ฐ KDE) ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ†ตํ•ฉ๋˜๊ณ  ๋ถˆ๊ฐ€์ง€๋ก ์ ์ธ IPC ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."
_ํ•˜์ง€๋งŒ, ํ•˜์ง€๋งŒ - ICCCM์€ ๋˜ํ•œ ํ”„๋กœ์„ธ์Šค ๊ฐ„, ํ†ตํ•ฉ๋˜๊ณ  ๋ถˆ๊ฐ€์ง€๋ก ์ ์ž…๋‹ˆ๋‹ค..._
์ปค๋„ ์ด๋ฒคํŠธ ๊ณ„์ธต - DBus๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ „์ฒด ์‹œ์Šคํ…œ์—์„œ ๊ณต์œ ํ•˜๋Š” ๋‹จ์ผ ๋ฒ„์Šค๋Š” ์ปค๋„์—์„œ ์‹œ์Šคํ…œ์˜ ์ตœ์ƒ์œ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋””์Šคํฌ๊ฐ€ ๊ฐ€๋“ ์ฐผ๊ฑฐ๋‚˜ ํ”„๋ฆฐํ„ฐ ๋Œ€๊ธฐ์—ด์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ๋ฐฐํ„ฐ๋ฆฌ ์ „์› ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๋Š” ์‹œ์Šคํ…œ ์Šคํƒ์„ ๋ฒ„๋ธ”๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹œ์Šคํ…œ์ด ์‘๋‹ตํ•˜๊ณ  ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. D-๋ฒ„์Šค ์‚ฌ์–‘
    http://dbus.freedesktop.org/doc/dbus-specification.html

  2. C#์šฉ DBus ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋ž˜ํผ ์•„๋‹˜, ์ˆœ์ˆ˜ C#)
    https://github.com/mono/dbus-sharp

  3. ํŒจ๋„ ์• ํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฐธ์กฐ ์„ค๋ช…์„œ
    https://developer.gnome.org/panel-applet/stable/

  4. GnomeGoal์€ ๋ชจ๋“  Gnome ์• ํ”Œ๋ฆฟ์„ ์ƒˆ๋กœ์šด DBUS API(Bonobo์—์„œ ์ œ๊ณต)๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    https://wiki.gnome.org/Initiatives/GnomeGoals/AppletsDbusMigration

Ubuntu ํŒจ๋„ ์• ํ”Œ๋ฆฟ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Gnome ๋Œ€ Unity ํŒจ๋„(์• ํ”Œ๋ฆฟ) ํ˜ธํ™˜์„ฑ
http://ubuntu.itssprite.com/ubuntugnome-vs-unity-panel-applet-compatibility/

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€ํ‘œ
( ์•„์•ผํƒ€๋‚˜ , ์œ ๋‹ˆํ‹ฐ , ์šฐ๋ถ„ํˆฌ )

์ƒํƒœ ์•Œ๋ฆฌ๋ฏธ ์‚ฌ์–‘(SNI, org.freedesktop.StatusNotifierItem)
http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/
"Freedesktop ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์‚ฌ์–‘์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค...
์ตœ์†Œํ•œ KDE Plasma ๋ฐ Unity์—์„œ ํ”„๋กœ๋•์…˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค."

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจ๋„ ํ‘œ์‹œ๊ธฐ
    https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators

libappindicator ์ฐธ์กฐ ์„ค๋ช…์„œ
http://developer.ubuntu.com/api/devel/ubuntu-12.04/c/appindicator/

Gnome ํŒจ๋„์˜ Ayatana ํ‘œ์‹œ๊ธฐ:
https://launchpad.net/indicator-applet

MATE์šฉ ํŒจ๋„ ์• ํ”Œ๋ฆฟ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/mate-desktop/mate-indicator-applet
๋‹ค์–‘ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ •๋ณด๋ฅผ ํŒจ๋„์— ์ผ๊ด€๋˜๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Unity ๋ฐ Mono C#์ด ์žˆ๋Š” Ubuntu์˜ ์•Œ๋ฆผ ์•„์ด์ฝ˜ ์˜ˆ:
http://www.arvydas.co.uk/2012/08/notification-icon-in-ubuntu-with-unity-and-mono-c-sharp-example/

๊ฐ ํ‘œ์‹œ๊ธฐ๋Š” DBus์—์„œ ์ฐพ์„ ์œ„์น˜์™€ ํŒจ๋„์— ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” /usr/share/unity/indicators์— ์ž‘์€ ํŒŒ์ผ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์‹œ๊ธฐ ํ”„๋กœ์„ธ์Šค๋Š” ์„ธ์…˜ ์ดˆ๊ธฐํ™” ๋ฐ๋ชฌ์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํƒ‘ ์•Œ๋ฆผ ์‚ฌ์–‘
http://www.galago-project.org/specs/notification/0.9/index.html
" ์•Œ๋ฆผ์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋Š” 200x100์„ ์ดˆ๊ณผํ•ด์„œ๋Š” ์•ˆ ๋˜์ง€๋งŒ ์ตœ๋Œ€ ํฌ๊ธฐ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

https://wiki.ubuntu.com/MessagingMenu/

๋ฉ”๋‰ด ํŒจ๋„์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•:
http://www.linuxandlife.com/2012/05/ubuntu-panel-transparent.html

"์ง€ํ‘œ๋Š” ํŒจ๋„์˜ ๋ ˆ์ด๋ธ”์ด๋‚˜ ์•„์ด์ฝ˜๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์ •์˜ ๋ Œ๋”๋ง ๋˜๋Š” ๊ธฐํƒ€ ์œ„์ ฏ ์—†์Œ"
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ‘œ์‹œ๊ธฐ๋Š” 22ํ”ฝ์…€์˜ ๊ณ ์ • ์•„์ด์ฝ˜ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
https://bugs.launchpad.net/ubuntu/+source/indicator-application/+bug/533439
"Libindicator API๋Š” ์•„์ด์ฝ˜ ํฌ๊ธฐ ๋ฐ
๋”ฐ๋ผ์„œ ๋ชจ๋“  ์•„์ด์ฝ˜ ํฌ๊ธฐ๋Š” 22px์ž…๋‹ˆ๋‹ค."

์‹คํ–‰ ์ค‘์ธ ํ‘œ์‹œ๊ธฐ ์• ํ”Œ๋ฆฟ์˜ ์ƒํƒœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ ๋ฐ ์—…๋ฐ์ดํŠธ
http://www.helptouser.com/ubuntu/11162-is-it-possible-to-alter-and-update-the-status-icon-of-a-running-indicator-applet.html

์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์œ„์ ฏ(Plasma/KDE)

  1. ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์œ„์ ฏ์€ ์‹œ์Šคํ…œ ์ •๋ณด, ์•Œ๋ฆผ ๋ฐ ์„œ๋น„์Šค๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    https://userbase.kde.org/Plasma/SystemTray

xembed ํ•ญ๋ชฉ์€ 22ร—22 ํ”ฝ์…€๋กœ ํ•˜๋“œ ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ์•Œ๋ฆฌ๋ฏธ ์‚ฌ์–‘, KStatusNotifierItem ํด๋ž˜์Šค
https://github.com/lxde/lxqt/issues/359

2014๋…„ 3์›” 2014-03-04, Plasma Next์˜ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด
http://blog.martin-graesslin.com/blog/2014/03/system-tray-in-plasma-next/

"์šฐ๋ฆฌ๋Š” Plasma Next๋ฅผ ์œ„ํ•œ ๋ ˆ๊ฑฐ์‹œ(xembed) ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
"๋Œ€๋ถ€๋ถ„์˜ GTK+ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋˜ํ•œ ํ†ตํ•ฉ ํ†ตํ•ฉ์„ ์œ„ํ•ด appindicator ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค."
"ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด Qt 5.4๊นŒ์ง€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค."
"์•„์ง๋„ ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๊ณ  ์ค‘๋‹จ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค."

๊ทธ๋†ˆ ์‰˜ ๋ฉ”์‹œ์ง€ ํŠธ๋ ˆ์ด

https://wiki.gnome.org/Design/OS/MessageTray
"๋ฉ”์‹œ์ง€ ํŠธ๋ ˆ์ด ๋””์ž์ธ ํŽ˜์ด์ง€๋Š” ๊ตฌ์‹์ด๋ฉฐ ์ฐธ์กฐ์šฉ์œผ๋กœ๋งŒ ๋ณด๊ด€ ์ค‘์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋””์ž์ธ์€ ์•Œ๋ฆผ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”."
https://wiki.gnome.org/Design/OS/Notifications

Ubuntu์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” Gnome 3์šฉ ํƒ€์‚ฌ "Indicator Applet"๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
https://code.launchpad.net/~jconti/indicator-applet/gnome3

http://live.gnome.org/GnomeShell/Extensions

๊ทธ๋†ˆ ์‰˜์€ (์„ค๊ณ„์ƒ) ๋งค์šฐ ์ œํ•œ๋œ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ํ—ˆ์šฉํ•˜๋ฉฐ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด๋Š” ์ด๋Ÿฌํ•œ ์˜์—ญ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ํŠน์ • ๋ ˆ๊ฑฐ์‹œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์—†์• ๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฐ๋งŒํ•จ์˜ ์ผ๋ฐ˜์ ์ธ ์›์ธ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค."

"๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์ƒˆ API๋ฅผ ์„ค์ •ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด๋ฅผ ์ด์‹ํ•  ์‹œ๊ฐ„์„ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด์— ๋Œ€ํ•œ ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."

http://worldofgnome.org/shell-new-notifications-goodbye-message-tray/
2014-01-05, "GNOME ๊ฐœ๋ฐœ์ž๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์•Œ๋ฆผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."

https://blogs.gnome.org/aday/2014/06/18/a-notifications-update/
Fedora 22(GNOME 3.16)๋Š” ํ™”๋ฉด์˜ ์™ผ์ชฝ ํ•˜๋‹จ ๋ชจ์„œ๋ฆฌ์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ ˆ๊ฑฐ์‹œ ์•„์ด์ฝ˜ ๋ง‰๋Œ€๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ "ํŠธ๋ ˆ์ด" ์•„์ด์ฝ˜์€ ํ™”๋ฉด ์™ผ์ชฝ ํ•˜๋‹จ์˜ ์ž๋™ ์ˆจ๊ธฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” "์„œ๋ž"์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋†ˆ 3.16 ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ

https://github.com/gnome-design-team/gnome-mockups/tree/master/notifications

gnome-design ๋˜๋Š” #gnome-shell IRC ์ฑ„๋„

https://developer.gnome.org/notification-spec/

์ดˆ๋“ฑ OS์˜ WingPanel

ํ‘œ์‹œ๊ธฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐ์ฒ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„ธ๋ จ๋œ ์ƒ๋‹จ ํŒจ๋„

ayatana ํ‘œ์‹œ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ณธ OS:
https://github.com/dyson/indicator-workspaces/issues/3

์ด ์ƒˆ๋กœ์šด ํ‘œ์‹œ๊ธฐ์—๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ์ž์œ ๋„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ(๋ฉ”๋‰ด ๋””์ž์ธ์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ์ด์ œ ์œ„์ ฏ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ) ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ;) Ayatana ํ‘œ์‹œ๊ธฐ๋Š” ์—ฌ์ „ํžˆ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

ํŒจ๋„ ์ž‘์—…์˜ ํ•œ ์˜ˆ๋Š” Workrave ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.
๊ฐ ํŒจ๋„ ์œ ํ˜•์— ๋Œ€ํ•œ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/rcaelers/workrave/tree/7cb9aef971f21c9a473146f9b72693b86a4a76f6/frontend/applet ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
"๊ณ„ํ”ผ", "๊ณตํ†ต", "gnome-shell", "gnome2", "gnome3", "indicator", "mate", "win32", "xfce"

๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

1) ์ด์ œ Eto๋กœ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
2) ์–ด๋–ค OS๊ฐ€ ์ง€์›๋˜๋‚˜์š”?
3) ์–ด๋””์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ํด๋ž˜์Šค ์ด๋ฆ„?

๋‚˜์œ ์†Œ์‹, ์—ฌ์ „ํžˆ ์ง€์› ์—†์Œ, ์ข‹์€ ์†Œ์‹, ์ด๋ฒˆ โ€‹โ€‹์ฃผ๋ง์— Linux ๋ฐ Windows์šฉ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. :)

์ •๋ง ๋ฉ‹์ง„! :) ์ด์ œ ๋ณ‘ํ•ฉ๋งŒ ํ•„์š”ํ•œ๊ฐ€์š”?

๊ทธ๋ฆฌ๊ณ  ๋งฅ OS?

Android์—์„œ ํŠธ๋ ˆ์ด ์—๋ฎฌ๋ ˆ์ด์…˜์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :)

์ •๋ง ๋ฉ‹์ง„! :) ์ด์ œ ๋ณ‘ํ•ฉ๋งŒ ํ•„์š”ํ•œ๊ฐ€์š”?

์•„์ง ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์‚ฌ์ „์— #714๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งฅ OS?

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด MacOS์šฉ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์œ ์ผํ•œ MacOS๋Š” VirtualBox์— ์žˆ์Šต๋‹ˆ๋‹ค.

Linux Gtk ๋ฒ„์ „์ด ๊ฑฐ์˜ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค :D

indicator

์ž˜ ํ–ˆ์–ด! :)

์ œํ•œ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์ผ๋ฐ˜ ์ฐฝ ๋˜๋Š” ํŒ์—…์ž…๋‹ˆ๊นŒ?

์ž˜ ํ–ˆ์–ด! :)

์ œํ•œ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์ผ๋ฐ˜ ์ฐฝ ๋˜๋Š” ํŒ์—…์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๋ฐ”๋กœ GNOME์—์„œ libappindicator ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๋Š” ๋ฉ”๋‰ด๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋‚ด ์‹œ์Šคํ…œ์— ์ด์ƒํ•œ ํ™•์žฅ์ด ์—†์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

withoutextension

์ด๊ฒƒ์ด ๋ฐ”๋กœ GNOME์—์„œ libappindicator ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๋Š” ๋ฉ”๋‰ด๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... Hello World ๋Œ€์‹  ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Windows์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์•„์ด์ฝ˜์ด ์žˆ๋Š” ๋ฉ”๋‰ด ํ•ญ๋ชฉ๋งŒ).. ์ž์ฒด ์ฐฝ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์ด๋‚˜ ๋งˆ์šฐ์Šค ํด๋ฆญ ๊ทผ์ฒ˜์— ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜(๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ๋จ)์ด WPF๊ฐ€ ์•„๋‹Œ Windows.Forms์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ขŒํ‘œ๋ฅผ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ... ๊ทธ๊ฒƒ์€ ๋‚ด ์‹œ์Šคํ…œ์—์„œ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ... ๋‘ ๋ฒˆ์งธ ์Šคํฌ๋ฆฐ ์ƒท์„๋ณด์‹ญ์‹œ์˜ค. ํ…Œ๋งˆ์˜ ์ผ๋ถ€๊ฐ€ ๋น„ํ™œ์„ฑํ™” ๋œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

@hardhub afaik, winforms(๋ฐ macOS)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์— ์‚ฌ์šฉ์ž ์ง€์ • ์ปจํŠธ๋กค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด GTK#์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@cwensley ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ํ•œ ๊ฐ€์ง€ ๋ถ€์ •์ ์ธ ์ ์„๋ณด๊ณ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. appindicator๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์•„์ด์ฝ˜์„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ... ๊ทธ๋ž˜์„œ TrayIcon ์šฉ Eto์˜ API๊ฐ€ ์‹ค์ œ ํŒŒ์ผ ๊ฒฝ๋กœ์—์„œ๋กœ๋“œํ•˜๋„๋กํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค ...

@cra0zy ๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ๊ฝค ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์ž„์‹œ ํŒŒ์ผ์ด๋‚˜ ๋ฌด์—‡์ธ๊ฐ€์— ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@cwensley ,

๋‚ด ๋ง์€:
https://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.windows.forms.menuitem (v=vs.110).aspx

๊ฑฐ๊ธฐ์— ํ…์ŠคํŠธ์™€ ์•„์ด์ฝ˜ ๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

@cra0zy ๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ๊ฝค ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์ž„์‹œ ํŒŒ์ผ์ด๋‚˜ ๋ฌด์—‡์ธ๊ฐ€์— ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒŒ ๋‚ด๊ฐ€ ์ด๋ฏธ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

@hardhub ์•„ ๋งž๋‹ค, ToolStripMenuItem ๊ฐ€ ์•„๋‹ˆ๋ผ $ MenuItem #$ .. uh. ์–ด๋Š ์ชฝ์ด๋“  ์‚ฌ์šฉ์ž ์ •์˜ ์ฐฝ ๊ธฐ๋Šฅ์„ Windows ํ”Œ๋žซํผ์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ˆ˜๋™์œผ๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Windows 7์˜ ๋ณผ๋ฅจ ๋ฏน์„œ์™€ ๊ฐ™์€ ์™ผ์ชฝ ํด๋ฆญ ์ฐฝ์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? ์ข€ ํ—ท๊ฐˆ๋ฆฌ๋„ค์š”...

์–ด์จŒ๋“  ๋‹ค์Œ์€ API์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
```c#
๊ณต๊ฐœ bool Visible { get; ์„ธํŠธ; }

๊ณต๊ฐœ ๋ฌธ์ž์—ด ์ œ๋ชฉ { get; ์„ธํŠธ; }

๊ณต๊ฐœ ์ด๋ฒคํŠธ ํ™œ์„ฑํ™” { get; ์„ธํŠธ; }

๊ณต๊ฐœ ๋ฌดํšจ SetMenu(ContextMenu ๋ฉ”๋‰ด);

๊ณต๊ฐœ ๋ฌดํšจ SetIcon(์•„์ด์ฝ˜ ์•„์ด์ฝ˜);

๊ณต๊ฐœ ๋ฌดํšจ Show();

๊ณต๊ฐœ ๋ฌดํšจ ์ˆจ๊ธฐ๊ธฐ();
```

@cra0zy , ์™ผ์ชฝ ํด๋ฆญ์ด ์‚ฌ์šฉ์ž ์ •์˜ ์ฐฝ์„ ์—ฌ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๋‚˜๋Š” ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์— ๋Œ€ํ•ด ์ผ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ "Quit" ํ•ญ๋ชฉ์ด ์žˆ๋Š” ์˜ˆ๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ ๋ฉ”๋‰ด์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@cwensley

ContextMenuStrip ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ... ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...
https://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip(v=vs.110).aspx

๋ฉ”๋‰ด ํ•ญ๋ชฉ์˜ ์™ผ์ชฝ์— ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ... ์˜ˆ, ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒ์—…์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋ ˆ์ด์•„์›ƒ์— ๋Œ€ํ•ด ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ํ•ญ๋ชฉ ์™ผ์ชฝ์˜ ์ž‘์€ ์•„์ด์ฝ˜์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ˜ํ…์ธ ๋กœ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

WinForms ๊ตฌํ˜„ ์™„๋ฃŒ:
winforms

Gtk Mac/Windows ๊ตฌํ˜„ ์™„๋ฃŒ:
2

Wpf ๊ตฌํ˜„ ์™„๋ฃŒ:
wpf

ํ™๋ณด: #731

@cwensley ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@cra0zy ๋Š” ์—ฌ์ „ํžˆ Mac ํฌํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ #750์œผ๋กœ ๋ฎ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰