 äȤפĤ

 DATեΥݡȵǽ
GUIGtkFileChooserDialog򤷤DATե
OchushaTreeSelectorViewǼİĤ˥ݡȤ
ǽɤ
̯⤢롣DATե뤬žΤäΤλΤΤȤǽ
θȡDATե륤ݡѤΥ˥ޤĤURL
Ϥ륨ȥѰդƤURL黪Ƚ̤Ŭʥǥ
ȥ˥ݡȤȤUIˤʤ뤫ġġơURLѤΥ
ȥβˡֻȡץܥդƤܥ򲡤Ĥ򤹤뤿
İɽ롽Ȥʹɤ

CLIϡDATեΥեѥ̾פȡ֥ޤĤURLפΥڥ򸵤˥
ݡȤԤΤȤнʬ



 İ֥åޡǤΥåȡԡڡ(action-based-ui.txt̵)
Ǥɤ

ClipboardͳɤʤΤǡåȡԡμ϶餯ư
ǡʤȤ"text/uri-list"ڡȤǤСȤϤʤ
ǤȦ



 GtkTextViewɸΥХǥ󥰤F7ˤ륭åȥ⡼
OchushaHypertextViewǤͭˤʤ롣åȥ⡼ɤǤϡܡ
ˤݥåץåץ˥塼оݤϥåȤΰ֤ˤꤹ٤
ʡ



 ֥ڡ򥿥֤ڤؤȥܤڤؤ̯ʺ
֤ڤؤȥΥإå˥ܡɥեꡢ
ܤڤؤȤ˥ܡɥե롣Ԥ줷
ˡġġ

Ȥ櫓ǡڤĴ

 ֤ڤؤΥХåθƤФ
board_switch_page_cb<1>: page_num=1
combo_changed_cb<1>: page=1, current_page=0
board_switch_page_cb<1>: page_num=1
board_switch_page_cb<2>: page_num=1
notify_page_cb: page=1
combo_changed_cb<2>: page=1, current_page=1
board_switch_page_cb<2>: page_num=1

 ܤڤؤΥХåθƤФ
combo_changed_cb<1>: page=0, current_page=1
board_switch_page_cb<1>: page_num=0
board_switch_page_cb<2>: page_num=0
notify_page_cb: page=0
combo_changed_cb<2>: page=0, current_page=0


ܤݡġĲʡ괺Ƥ



 accel-map (λ)
(gtk_accel_path "<Actions>/OchushaActions/OpenURL" "<Control>l")
ͤġġ
¾ΤȰ㤦action_groupɲäƤ뤻path㤦Τ
gtk_action_group_add_action()ǤϤʤ
gtk_action_group_add_action_with_accel()ѹƲ衣



 äѥܡɥե
ߤɤGtkWidgetܡɥեäƤΤΤˡä
ʤΤġġ
¡GtkWidgetܡɥե餽λ¤Τ
ѤäƤɤȻפ

GtkWidget
focus-in-event
focus-out-event
ȤǤϤ뤬¸ɬס

To receive this signal, the GdkWindow associated to the widget needs
to enable the GDK_FOCUS_CHANGE_MASK mask.
ա

ĴηFocusNotifier饹Ƴ
ViewManagerfocusϢʬ缡Ƥ
ĤǤViewManager߷פľʤȻפʤǤʤ
(view-manager.txt̵)



 եDnDưưȥ˥塼СˤĤ()
İ֥åޡǥեDnDǰư顢

** (lt-ochusha:18733): CRITICAL **: lookup_menu_item_from_shell: assertion `item != NULL' failed

** (lt-ochusha:18733): CRITICAL **: update_menu_entry: assertion `menu_item != NULL' failed

ʤ롣˽եǤɲäƱ
Ȥ



 ڥUIˤ⡢ޤ¤Υͥʡ
⤷ϡΤɤ餫򡢤λΥե˱ͥ
ŪɽȤͤ롣

ܤƤ˥ɽˤܤƤ
ˤϥɽˤ뤳ȤǡŪˣڥäݤUIˤʤ롣
âϤǤäءܼŪˡ졹̤ʥ(ܥ
򲡤Ȥ륷硼ȥåȥ򲡤ʤ)򵯤ʤڤ
ؤǤʤ

ϡüʼ㤨СܤƤʤ¦ΥڥǤϥġС
ȥڥΥʬɽĤζ֤⤦Υڥ˾Ȥ
UIʤ顢֤򤹤Ȥڤóݤˤäɽڤؤ
ǽˤʤ롣ƤߤͤϤ



 ActiveFolder줪Ūʲ(active-folder.txt̵)



 ܡɽˤĤ
ߥ桼λؼˤꤢܡ󤵤줿쥹ϻ¦Ǥܡ󤵤줿쥹˻
ɽ򤹤뤫ɽΤΤ򤷤ʤ̤ꤷʤ¾ˤɽˡ
Ϥ롣㤨СΤ򾮤ʸɽפȤϻȤʵ롣



 ԤˤĤ
ͤΤ褦ʷǼĤӤʤɤ⥢ʤΤǡ
βԤϡŪפʹñ̤ǹԤΤڡȡĿŪˤϻפ
μԹ塢ĹԤޤ쥹ݥåץåɽ
ߤʤΤؤ쥹񤭴§򤤤äơĹԤ
<br>͹ǶԤƤ褦˸뤳ȤϲǽʤΤǡ
դ򾯤ͤƤߤݥåץåѤΥ쥹񤭴ؿȤΤ
Ȥ⤢롣



 AAȽAAѥեȤλѤˤĤ
ochusha-user.cssɤ߹褦ˤʤСSchemeˤ쥹񤭴AA
ݤʬ<span class="aa"></span>ǰϤʤɤ̤ΥŬѤ
ȤǤ롣



 SchemeˤġγĥˤĤ
ߡƥץ졼ȤǻȤִɤϾʤäʸФ
ġˤϤäʵǽߤ
㤨С֥եưƥ桼򤷤ե̾פ
७ɤɤ
ʸѥ׷ͳήॳޥɤưʤƥƥץ졼Ȥ
С㤨ʸfooήߡ桼򤷤ե
񤭹ʤƥƥץ졼Ȥ񤱤롣
"| foo > %FILE%"



 OchushaHypertextBuffer/OchushaHypertextView֤ˤĤ
ߤGtkTextBuffer/GtkTextView򸵤ˤʤäHTMLɽ¸Ƥ
뤬Ȥ⤢롣
ǶΤ褦˥ޥCPṲ˻ȤƤ븽Ǥϡ󥰥륹
ɤGTK+Υᥤ롼¿˥꥽ȤäȤν򤷤Ƥ
GtkTextViewϤäȻˤʤȤʷϵ롣
ġĤȤϤݤ̤ͥϷ㡣



 ǥХå󥽡ʸ󸡺ˤĤ



 2chΥФǲȯˤĤ(old-logs.txt̵)



 ƤεϿߥ󥰤ˤĤ
ǽμ¾ڤΤˡ괺ߤΤΤǤϥ֤Ĥ륿
󥰤ǵϿƤ뤬֤Ĥˤ㽪λȤȿǤ
ʤȤˤʤ롣Ϥʤ褬Τǡˤʻ˵Ͽ
Ѥ褦ġġ



 subject.txtɤ߹߼ԻΥɥѥ()ǲ
malloc(): memory corruption: 0x09d69a12
abort()
subject.txtɤ߹ߤ˼ԤĤΥˤĤơֹץܥ
νȿͤsubject.txtɤ߹߼ԡľȤ
Τˤʤ롣



 SQLiteϢγФ
void *sqlite3_update_hook(sqlite3 *handle, void (*)(void *, int, char
const *, char const *, sqlite3_int64);
ȤȡDBѹ(INSERTDELETEUPDATE)٤˸ƤФcallback
Ͽ뤳ȤǤ롣



 åˤĤ(ϴλȥåפϤޤ)
ǤϡåϤδõǽƤ֤Ǥꡢ
ȤʪˤʤäƤʤ
å줿֤ư硢εư˥Ȥ
ɤ򤹤ȡΥ˼ưŪˤ㤬ư٤Ǥꡢ
Τϲǽʸ¤ξ֤Ƥ٤
ξǤϤʤư˼ưŪ˳ڡ桼ϿǤ
褦ˤƤȤͤ롣
֥֥饦ϰ̤(ư˳)ۡڡǤ롣
襤㤨Х֥åޡˡ֥ۡڡפ뤤ϡ֥
åספȤ̤ʥեѰդƤưˤȤ
Ȥˤʤ
åȴФƤΤξ֤ȤΤϰ
̣Ū˸äʤۡڡʤ鵯ư˳Ƥ⤪
ʤ



 CompositeIconιʤˤĤ(λ)
stock_idͿ١(Pixbuf)ˡǤstockŤͽ
Ƥ뤬äΤGdkPixbufAnimation(ModPixbufSimpleAnim⤪k)
ȥ١Ťͽ񤭤ƿModPixbufSimpleAnim褦ѹ
ɤ⤷줺

stylestock_idƥե졼бGdkPixbufʤɤ̤ǤС
줿ⶦͭǤȦʤΤǡåͤ٤ߤΤ褦
󿷵˺äƤΤ餫̵̡



 ֤κǿǤimport٤ʡ(λ)
ޥɥäƤʤġġ



 BBSThreadView"popup_menu"ϥɥ뤹٤ȤˤĤ(н)
ޥݥ󥿤󥯤ˤäƤGtkTextViewͳΥݥåץåץ˥塼
ФΤϥʥ



 ɥСβѤ꤬()
Ѥե饹򳫤顢ΤѤե
ġġѤͤä

ˡֲѤץܥɽΤ夷ĤƤ




 LockCHECK_LOCK_ORDERεưκ߷(lock.txt̵λ)
åΥåɤ٤ʤäƤɤäȸʤ
ޤ



 μ갷ˤĤƺƹ(images.txt̵ܴۤλ)
¤GdkPixbufLoaderϥåɥդäݤΤǡ
gdk_pixbuf_loader_write(...)դδؿμ¹ԤǤС
GDK_THREADS_ENTER()/GDK_THREADS_LEAVE()ˤ륬ɤɬ̵
󡢤ηФ륷ʥΥϥɥGTK+ʴؿƤֻˤϥ
ɬפȤʤ뤬ڤ˥ƥ륻ûǤͽ
(ɳϴλ)



 楹åͳΥǥåɥå()ȯޤ
[Switching to thread 5 (Thread 0xb5d9eb90 (LWP 19870))]#0  0x00a0b17a in ?? ()
   from /usr/lib/libgdk_pixbuf-2.0.so.0
(gdb) bt
#0  0x00a0b17a in ?? () from /usr/lib/libgdk_pixbuf-2.0.so.0
#1  0xb5d9d248 in ?? ()
#2  0xffffb015 in ?? ()
#3  0x054dd000 in ?? ()
#4  0x00007fff in ?? ()
#5  0x00010000 in ?? ()
#6  0x037f0c7f in gtk_selection_data_get_targets ()
   from /usr/lib/libgtk-x11-2.0.so.0
#7  0x00a0b317 in ?? () from /usr/lib/libgdk_pixbuf-2.0.so.0
#8  0xa31c9518 in ?? ()
#9  0x0000013c in ?? ()
#10 0x00000113 in ?? ()
#11 0x00014feb in ?? ()
#12 0x00000000 in ?? ()
ĲʤΡ
ImageManagerκWorkerJobWorkerThreadΤʤβ̤Ƥäݤ
åϤ줬ʤǡĤGDKΥåäƤ褦
̵¥롼פäݤ֤ƤޤäƤ롣ǡᥤ󥹥
ɤGLibΥᥤ롼פǤʤˤʤäƤ롣

pngե(1258x32767976.3KB)
~/.ochusha/image_cache/06/http%3A%2F%2Fwww2.imgup.org%2Fiup696122.png
ɤǤν餷

ɤ⡢gdk_pixbuf_loader_get_pixbuf(loader)֤äƤƤʤ͡
gdk_pixbuf_loader_get_animation(loader)gdk_pixbuf_loader_get_pixbuf(loader)
GDKΥåǼ¹Ԥ褦ˤ顢UIϻߤޤʤʤäCPU
٤ޤäƤġġ

ü˥󥰤ɬפʲɽʤ(󥰥顼)Ȥ
ΤΤ줺ġġ


Ȥꤢlibochushaglobal_lockäƤʥߥ󥰤
GDK_THREADS_ENTER()ˤϡǽʸ¤֥åʤ褦ˤ
GDK_THREADS_ENTER()˻ȤåμΤLock::get_slave_lock()
ΤʤΤǡŻǤǤtrylock()ƼԤʤ
褦ѹ褦

⤦ĹͤкȤƤϡglobal_lockλѤΤΤ︺
Ȥ롣sigslotߤglobal_lockȤʤС︺
Ǥ뤬ߤLORкǤԽʬʤΤLock򤫤ʤɬפ롣
ʤȤ0.6꡼ʹߤޤǤϸݻ (ʹsigslot.txt)
LockβϽλΤǡglobalλѤ︺뤳Ȥϲǽ
󤷤ǡ



 datեLast-ModifiedͤˤĤ(н)
datեȯȯ줿ˤĤơLast-Modifiedեɤ
դǤʤΤ̯˻Ȥ꤬datե뼫Τκǽ
ѤƤгͻ­褦ʵ뤷ͥåȥͳdatե
ɤ߹߸塢¸Last-Modifiedإå򸵤utime()datե
κǽȣͤŪLast-ModifiedбդƤ
Ǥ롣



 datեBBSThread::graveδطˤĤ(н)
Ĺ餯¸ߤgraveƤʤäХˤꡢäƤ륹
graveϥߤˤʤäƤ뤳Ȥ¿

ʤȤdatե¸֤߰餽datեǸ˼URL
ΤǡgraveĴͤ٤



 žˤĤ(н)
boardlist.xmlи顢ž~/.ochusha/cache/ʲ
Υǥ쥯ȥ깽¤餢ȤƤ롣
ϣͤǽʬ



 Ĥû̾դˤĤ()
֥٥䥹ʤɤɽ̾ϡ̤̾()ǤʤƤ
kȤ桼ǤСͤ˲нʬû̾դȻפ
Ȥ⤢롣
BulletinBoard˥եɤɲäơBoardProperties򤽤б
֥٥Ȥȥĥɽʬѹɤ



 ԶȤʤʤΰ´򴶤벿(н)
ߡİΥƥ֥եǤΥץѥƥϡġװƤ
뤬ºݤˤĤǤʤΤǡİž䥹ɽʤɤ̵̣
ɽ٤ǤϤʤʡ



 ⥳ƥȥ˥塼ɲä()
FirefoxΥڡǱå

(B)
ʤ(F)
(R)
(S)
----
Υڡ֥åޡ(M)
̾դƥڡ¸(P)
ڡURL᡼(E)
-------------------------
طʲɽ(W)
٤(A)
-------------------------
ڡΥɽ(V)
ڡξɽ(I)
ץѥƥ(P)
-------------------------
/
	Blogger
	GMail
ڡ/
	ΥڡΥå
	Ϣڡ
	󥯸
	ڡޤ

Ȥƥȥ˥塼ɽ롣

ߤΤΥǱå

ƥѳġ/
---------------------
ڤ(T)
ԡ(C)
Žդ(P)
(D)
---------------------
٤(A)

Ȥƥȥ˥塼ɽ롣ˤĤΥ˥塼
ɲäưʲΤ褦ˤ

(P)
ʤ(N)
ǽΥ쥹(T)
(J)
ǸΥ쥹(B)
---------------------------
(R)
ư
---------------------------
Υ֥åޡ(M)
Ĥ򳫤(D)
ξ(I)
---------------------------
ƥѳġ/
---------------------------
ڤ(T)	ʡ
ԡ(C)
Žդ(P)	ʡ
(D)		ʡ
---------------------------
٤(A)
---------------------------
ꥻå



 ֥åޡ(TreeView̡)Ϣ˥Х()
İıåǥ֥åޡӡäե˥֥å
ޡƤ顢OchushaTreeMenuHelperǷٹȯ

** (lt-ochusha:1122): CRITICAL **: lookup_menu_item_from_shell: assertion `item != NULL' failed

** (lt-ochusha:1122): CRITICAL **: update_menu_entry: assertion `menu_item != NULL' failed

եü˥塼ƥΡ֥֤ǳפեƬ˸
ȤԶ⤢ꡣ

 Ĵ
1) äե˥֥åޡ줿Ǥ˥塼С鸫
 ʤ(äݤʥե˸뤬()ɽƤʤ)
2) 1)ξǡ̤Ǥ򤽤Υեɲä褦ȤȾ嵭ηٹ
 롣



 ¸줿ɤ߹ߤˤĤ()
ߤμǤϳĤˤĤơưĤƳ줿threadlist.xml
ɤ߹褦ˤʤäƤ뤬̤ĤΥURLäȤƤ⡢
ΥȥΥݥåץåפΤɤ߹ϤʤΤᡢ
ΥǤ̤ΤΥװΤϤäȥ줫Τʤư
ĹָǤޤΤϼʤŬʥߥ󥰤ƤĤˤĤ
threadlist.xmlɤ߹ޤ뤳Ȥϲǽ
ưǤkȻפ



 ɥС̵ξ֤ǵưΥɥС()
ɥС̵ξ֤ǵưǡɽ/ɥСפǤɽ
ȡΤΰʳޤɽƤޤ



 ֤Υ쥹˥쥹פˤĤ()
ߥ쥹ǥȽ񤭹ߥɥȤबƱ¸ߤ
뤿ᡢ֤Υ쥹˥쥹פˤɤ٤¤äƤñ
㲽褦
ѤΡֽ񤭹ߥɥפ¸ߤshowƤ餽裱
Ȥ롣ֽ񤭹ߥɥפshowƤ餺ߥ쥹
ǥפƤ顢裱Ȥ롣
ɤ⳺ʤä顢ǸĤ쥹ǥƱΤΤѰդ
ƻȤ
顢ǿ񤤤Ѥ뤳Ȥʤɤͤäʬˤ
ưˤʤꤽʤΤǡΤˤΥ桼󥿥饯
򸵤˷ꤹ뤳Ȥˤ



 ɽν֤ˤĤ(н)
ߤμǤϥ쥹ֻURLǳ줿Ǹδɥ쥹
Ƭ̤褦˥뤵롣
㤨СDATʤɤǤƱưǤꡢưǤ
ʤɤʤ¤ꤤĤ⥹ɽ롣
쥹Τʤ򳫤ƱεưɬŬȤϸ
ʤ㤨СɽƤդפɽ֤Ȥ٤Τ
ʤޤ֥֥饦ΡסֿʤŪʵǽ硢
줳֥֥饦ƱͤɽƤդ꤬ɽߤΤ
;ȤΤ



 Υȵ§Ϣ˥Х()
ǥեȰʳε§ꤷĤ򳫤ȡǥեȵ§ꤷƤ
ȦĤˤޤǱƶܤäƤޤХ͡



 GtkTreeSelectionΤäȤ¸
ϡTreeViewbutton_release_cbʤɱåpopup˥塼Ф
Υ᥽åɤΰȤƥ˥塼оݤȤʤGtkTreeSelectionŪ
ͿƤ뤬GtkTreeSelection"changed"ʥªȡǿ
GtkTreeSelectionɤ褦
ȤСܡǥݥåץåץ˥塼Фʤɤ
бǤʡʥݥåץåץ˥塼Ф˸ߤоݤȤ
GtkActionactivateȤΤ⤢ˤʤˡ




 BulletinBoardTreeElementʤΤϡڤ衪
֥åޡǤURLΤäƤСʤĤʤ˥
ǤΤƱͤǡİǤбTreeElement
BulletinBoardؤбϼ롣



 Τʤ򳫤Ȥεư
ޤǤμǤϡǼĤURLǤ뤳ȤȽäƤƤ⡢ĤΥ
ɤ߹Ǥʤ⤷ϡŤʤɤͳǡΥ
¸ߤ餫ˤʤäƤʤ̤ΤΥURL򥯥åȡĤ
ˡ΢ǥ줬֥֥饦ǳƤޤäƤʤɤߤƤ
Ǥѡˡ
1) Ĥ򳫤˥򳫤
2) ľܳ
Τɤ餫εư򤹤٤ʡ˻Ǥ륹URLǤǽ
θȡ2)˾ޤ



 Ʊư()

  桼ΤƱưҤȤĤ¤ޤ¹Τ
  ФơURL򳫤ʤɤλԤ褦ˤ뤿
  ᡢ̾դѥפȤȤͽꤷƤ롣

  See Also: mkfifo(3), fifo(4), open(2)

  ޤư˽񤭹Ѥ(O_WRONLY|O_NONBLOCK)mkfifo()롣
  ե뤬¸ߤʤС롣

  mkfifoԤ
	¾˼¹Τץ¸ߤȤȤ̣롣

	ξ硢ޥɥ饤βˤɬפǤСfifo񤭹
	ѤopenؼޥɤäƤץλ롣

	񤭹ѤopenԤˤϡΤ㽪λ
	ѥץեξõǤʤäǤΤǡΥץ
	ͣΤץȤʤ롣

	Ūˤϡopen(ե̾, O_WRONLY|O_NONBLOCK)ˤ񤭹
	Ѥopenǡɤ߹¦ˤʤ¹椪ץ
	open뤬ʤerrno=ENXIOǼԤ롣
        ȤꤢFreeBSDLinuxSolarisǤϤΤ褦ư뤳
	ǧ
  
  mkfifo
	ΥץͣΤץȤʤ롣

  ͣΤץȤʤ٤ץϡʹfifoͳλ
  뤿fifoɤ߹Ѥopen롣ɤ߹Ѥfdϥ٥
  ȥ롼פpoll褦glibĴ򤷤Ƥ



 main()ǤϤʤGUIΥᥤ롼gtk_main()äƤ줿
   Ԥˤϡ

  ͣΤץȤưǤ⡢gtk_main()Ƥ
  fifo˻ؼѥޥɤ񤭹ळȤǤϤʤΤǡ񤭹Ǥ
  Сgtk_main()¹Ըpoll٥ȤȤƥޥɤ¹Ԥ뤳Ȥ
  ԤǤ롣ϥ֥åƤޤʤȤǤ롣

  NONBLOCKɤ߹߻fgetsȤȡԤޤɤʤɤʬ
  1ԤȤfgetsƤޤȤȽʤΤǡɤ߹¦
  ̤ԤǤ뤳Ȥǧ٤ȤꤢԤǤ
  äˤΤƤäƤȤɤġġBLOCK⡼
  GUI˻ߤޤ붲줬ΤǤФƻȤʤ



 ؤλؼޥɤˤĤ()
  ̡ʲΤ褦ʤΤѰդƤɤ衢ǽʸ¤
  ƤschemeǤ褦ˤΤǡؼޥɤschemeˤ
  Ƥ

  (refresh-boardlist)		// İ򹹿
  (login-2ch-be)		// 2ch Be˥󤹤
  (login-2ch-viewer)		// 2ch viewer()˥󤹤
  (open-url "<URL>")		// <URL>򳫤
  (open-url-in-tab "<URL>")	// <URL>򥿥֤ǳ
  (work-offline)		// offline⡼ɤˤ
  (work-online)			// online⡼ɤˤ

  ġĤȻפä̯


    
 󥹥ȥ֥åޡ()Ѥεưѹн
  ñ̤ǤϤʤURLñ̤ǥ֥åޡǤ褦ˤʤΤǡ
ʰ֤֥åޡȤƹʿϿ뤳Ȥϴñ˼¸
Ǥ롣ʤΤǡɤߤξ֤ϿƤĤ³ɤߤȤ
ˤϥ쥹֤֥åޡȸȤǽˤʤ롣ޤޤǤ
ֲѤפϤȤȿ쥹ΰ֤ɽƳ줿ΤǤ
ꡢ˰ưʤˤʤ¤ɤߤ֤εϿˤϻȤʤ
ɤߤ֤ϿǤ뤿ᡢεʾ
̾ο쥹֤Τ뤿εǽΤžݤǤ롣
̣ǡ֥åޡƳˤֲѤפ쥹
֤Τ뤿εǽѤˤƤޤɤߤ֤εϿˤϥ֥åޡ
ȤȤȤʬ褦ˤʤΤǡؤ¿
ԤǤ롣ϡ̥֥åޡδʤɤʤȤꡣ
ɤߤ֤Ͽ٤˥֥åޡ˿ʥȥ꤬äǤϡ
ñĴäƤޤɤߤ֤Ȥϡ³ɤ߻Ϥ᤿
פˤʤ櫓顢줬Ū³Ū˼갷֥åޡ¾
ǤƱǤؤ롣ɤߤ֤ϿΥ֥åޡ
Ǥ졹̾Υ֥åޡδǽȤäƾõΤѤʤ

ʤΤǡɤߤ֤ˡֲѤΥܥ졢ܥ
åб֥åޡǤ֥åޡõ
ȤȤߤΡ֥󥹥ȥ֥åޡפȤǰƳ

ɽΥ쥹ֱåǸ˥塼ˡ֥󥹥ȥ֥åޡ
פȤΤɲä򤹤ȤΥ쥹ľˡֲѤץ
ɲäƱˡ֥åޡΡ֥󥹥ȥ֥åޡץե
ˤΥ쥹URLϿ롣֥åޡ줿Ǥ򼡤Ȥ
ˤ̾Υ֥åޡƱͤϿ줿URLǷޤ쥹ɽ졢
ΰ֤ˤϡֲѤץܥ롣ܥ򲡤ȡ֥󥹥
ȥ֥åޡץեURLϿ줿Ǥ˾äȤ
᡼

̤ˡֲѤפʬɬ̵ʡ
Υ쥹ֱåǽФݥåץåץ˥塼ֲѤפ
顢Υߥ󥰤ǥ֥åޡΡֲѤץե
ˤΥ쥹URLϿΥåǡֲѤץե
ΤΥURLĥ֥åޡõġĤȤñʻͤǽ
ʬǤꡢäỌ̇̄ʬ䤹



 Υ򵭲ߤͤ餷()
  ճʤȤˡ̤ˤϼ¸Ǥʤresize줿ȤΤŬʼ
ʤ

  ºݤresizeΤbutton_press塢motion_notify_eventʤΤǡ
ĤɤäƤвȤʤꤽǤϤ뤬̤ˤʬ
ʤʤ顢GtkTreeViewbutton_press_eventmotion_notify_eventΥ
ɥϡֺǸưפǡ̾Υץꥱ٥Υϥɥ
˽äȤư顣

  ǤOchushaTreeSelectorViewȤGtkTreeViewΥ֥
饹ȤäƤΤǡGtkTreeViewΥ٥ȥϥɥμ¹ȸξ
Ӥ뤳ȤϤǤ

ϡbutton_press_eventmotion_notify_eventGtkTreeViewClass
ϥɥμ¹GtkTreeViewColumn֥Ȥ
guint use_resized_width : 1;
gint resized_width
Ѳɤ
Ѳä鲿ʥФ褦ˤ褦

super classΥϥɥ¹
gtk_tree_view_get_columnsGtkTreeViewColumnΥꥹȤ
event->window == column->windowGtkTreeViewColumnõĤä顢
resizeǽΤ
columnuse_resized_widthresized_width򵭲Ƥsuper class
ϥɥ¹Ըξ֤Ӥ롣
ӤѲä饷ʥȯԤ롽Ȥήˤʤ롣
