Merge lp:~tintou/pantheon-photos/menu-to-vala into lp:~pantheon-photos/pantheon-photos/trunk
- menu-to-vala
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Danielle Foré |
Approved revision: | 3151 |
Merged at revision: | 3157 |
Proposed branch: | lp:~tintou/pantheon-photos/menu-to-vala |
Merge into: | lp:~pantheon-photos/pantheon-photos/trunk |
Diff against target: |
2248 lines (+1012/-649) 32 files modified
data/ui/collection.ui (+0/-44) data/ui/direct.ui (+0/-7) data/ui/direct_context.ui (+0/-11) data/ui/event.ui (+0/-12) data/ui/events_directory.ui (+0/-24) data/ui/import.ui (+0/-22) data/ui/media.ui (+0/-27) data/ui/offline.ui (+0/-23) data/ui/photo.ui (+0/-27) data/ui/photo_context.ui (+0/-31) data/ui/savedsearch.ui (+0/-8) data/ui/search_sidebar_context.ui (+0/-6) data/ui/sidebar_default_context.ui (+0/-7) data/ui/tag_sidebar_context.ui (+0/-6) data/ui/tags.ui (+0/-16) data/ui/trash.ui (+0/-28) src/CollectionPage.vala (+222/-88) src/MediaPage.vala (+126/-21) src/Page.vala (+3/-40) src/PhotoPage.vala (+136/-34) src/camera/ImportPage.vala (+97/-10) src/direct/DirectPhotoPage.vala (+48/-33) src/direct/DirectWindow.vala (+1/-1) src/events/EventPage.vala (+15/-10) src/events/EventsDirectoryPage.vala (+83/-7) src/library/OfflinePage.vala (+90/-8) src/library/TrashPage.vala (+105/-8) src/searches/Branch.vala (+9/-25) src/searches/SavedSearchPage.vala (+26/-7) src/sidebar/Tree.vala (+14/-28) src/tags/Branch.vala (+9/-25) src/tags/TagPage.vala (+28/-5) |
To merge this branch: | bzr merge lp:~tintou/pantheon-photos/menu-to-vala |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Danielle Foré | Needs Fixing | ||
Review via email: mp+316393@code.launchpad.net |
Commit message
Move all the context menus to Vala
Description of the change
I hope this is close to a 1:1 conversion.
Corentin Noël (tintou) wrote : | # |
Danielle Foré (danrabbit) wrote : | # |
Okay after some testing I found:
* Toggling the places or metadata sidebar from two different views will cause photos to crash
* Fullscreen is a missing option in the main photos view
* I can't seem to figure out how to reliably reproduce this but sometimes when a menu closes the view sorting is reverted
Danielle Foré (danrabbit) wrote : | # |
Oops I was wrong on the last one. Happens when the menu opens. So I guess that metadata_
Danielle Foré (danrabbit) wrote : | # |
"Empty Trash" from the trash context menu item seems to not do anything
Danielle Foré (danrabbit) wrote : | # |
Not sure if this helps diagnose, but after using the menu to hide/reveal the sidebar, trying to do so with the button in the toolbar crashes Photos
Danielle Foré (danrabbit) wrote : | # |
In the library view, the slideshow button appears at the end of the toolbar, but in the single photo view it appears at the beginning.
Danielle Foré (danrabbit) wrote : | # |
Rotate, flip, and publish are sensitive in the library view when nothing is selected. Auto-adjust seems to be working properly
Corentin Noël (tintou) wrote : | # |
I've applied the requested changes
Danielle Foré (danrabbit) wrote : | # |
Right on! I can confirm that a number of the issues are fixed. But I found more ;p
* In Fullscreen, there is an empty context menu
* Sorting photos doesn't seem to work at all anymore :p
* Empty Trash in the places sidebar context menu still doesn't seem to do anything
* The "Show Info Panel" button in the toolbar doesn't always seem to update its icon state correctly. To reproduce:
1. hide the panel (from the context menu)
2. switch views
3. reveal the panel (from the context menu)
4. Switch back to the original view
- 3151. By Corentin Noël
-
Moved all the context menus to Vala
Preview Diff
1 | === removed file 'data/ui/collection.ui' |
2 | --- data/ui/collection.ui 2016-09-20 00:44:41 +0000 |
3 | +++ data/ui/collection.ui 1970-01-01 00:00:00 +0000 |
4 | @@ -1,44 +0,0 @@ |
5 | -<ui> |
6 | - <popup name="CollectionContextMenu"> |
7 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
8 | - <separator /> |
9 | - <menuitem name="ContextRevert" action="Revert" /> |
10 | - <separator /> |
11 | - <menuitem name="ContextCopyColorAdjustments" action="CopyColorAdjustments" /> |
12 | - <menuitem name="ContextPasteColorAdjustments" action="PasteColorAdjustments" /> |
13 | - <separator /> |
14 | - <placeholder name="ContextFacesPlaceholder" /> |
15 | - <separator /> |
16 | - <menuitem name="ContextFlag" action="Flag" /> |
17 | - <menu name="RawDeveloper" action="RawDeveloper"> |
18 | - <menuitem name="RawDeveloperShotwell" action="RawDeveloperShotwell" /> |
19 | - <menuitem name="RawDeveloperCamera" action="RawDeveloperCamera" /> |
20 | - </menu> |
21 | - <separator /> |
22 | - <menuitem name="AdjustDateTime" action="AdjustDateTime" /> |
23 | - <placeholder name="EditExtrasPlaceholder" /> |
24 | - <menu name="OpenWith" action="OpenWith"> |
25 | - </menu> |
26 | - <menu name="OpenWithRaw" action="OpenWithRaw"> |
27 | - </menu> |
28 | - <separator /> |
29 | - <menuitem name="NewEvent" action="NewEvent" /> |
30 | - <menuitem name="ContextJumpToEvent" action="CommonJumpToEvent" /> |
31 | - <menuitem name="ContextJumpToFile" action="CommonJumpToFile" /> |
32 | - <menuitem name="ContextPrint" action="Print"/> |
33 | - <menuitem name="ContextExport" action="Export" /> |
34 | - <placeholder name="ContractorPlaceholder" /> |
35 | - <separator /> |
36 | - <placeholder name="ContextTagsPlaceholder" /> |
37 | - <menuitem name="RemoveFromLibrary" action="RemoveFromLibrary" /> |
38 | - <menuitem name="ContextMoveToTrash" action="MoveToTrash" /> |
39 | - </popup> |
40 | - |
41 | - <toolbar name="CollectionToolbar"> |
42 | - <toolitem name="ToolRotate" action="RotateClockwise" /> |
43 | - <toolitem name="ToolFlip" action="FlipHorizontally" /> |
44 | - <separator /> |
45 | - <toolitem name="ToolPublish" action="Publish" /> |
46 | - <separator /> |
47 | - </toolbar> |
48 | -</ui> |
49 | |
50 | === removed file 'data/ui/direct.ui' |
51 | --- data/ui/direct.ui 2014-09-02 19:42:49 +0000 |
52 | +++ data/ui/direct.ui 1970-01-01 00:00:00 +0000 |
53 | @@ -1,7 +0,0 @@ |
54 | -<ui> |
55 | - <popup name="DirectContextMenu"> |
56 | - <placeholder name="ContextJumpPlaceholder"> |
57 | - <menuitem name="ContextJumpToFile" action="CommonJumpToFile" /> |
58 | - </placeholder> |
59 | - </popup> |
60 | -</ui> |
61 | \ No newline at end of file |
62 | |
63 | === removed file 'data/ui/direct_context.ui' |
64 | --- data/ui/direct_context.ui 2015-09-05 09:05:13 +0000 |
65 | +++ data/ui/direct_context.ui 1970-01-01 00:00:00 +0000 |
66 | @@ -1,11 +0,0 @@ |
67 | -<ui> |
68 | - <popup name="DirectContextMenu"> |
69 | - <menuitem name="ContextRevert" action="Revert" /> |
70 | - <separator /> |
71 | - <menuitem name="AdjustDateTime" action="AdjustDateTime" /> |
72 | - <separator /> |
73 | - <placeholder name="ContextJumpPlaceholder" /> |
74 | - <placeholder name="PrintPlaceholder"/> |
75 | - <placeholder name="ContractorPlaceholder" /> |
76 | - </popup> |
77 | -</ui> |
78 | \ No newline at end of file |
79 | |
80 | === removed file 'data/ui/event.ui' |
81 | --- data/ui/event.ui 2014-09-02 19:42:49 +0000 |
82 | +++ data/ui/event.ui 1970-01-01 00:00:00 +0000 |
83 | @@ -1,12 +0,0 @@ |
84 | -<ui> |
85 | - <popup name="CollectionContextMenu"> |
86 | - <separator /> |
87 | - <menuitem name="ContextMakePrimary" action="MakePrimary" /> |
88 | - </popup> |
89 | - |
90 | - <popup name="EventContextMenu"> |
91 | - <menuitem name="ContextRename" action="Rename" /> |
92 | - <menuitem name="EditEventComment" action="EditEventComment" /> |
93 | - </popup> |
94 | - |
95 | -</ui> |
96 | \ No newline at end of file |
97 | |
98 | === removed file 'data/ui/events_directory.ui' |
99 | --- data/ui/events_directory.ui 2014-09-02 19:42:49 +0000 |
100 | +++ data/ui/events_directory.ui 1970-01-01 00:00:00 +0000 |
101 | @@ -1,24 +0,0 @@ |
102 | -<ui> |
103 | - <popup name="EventsDirectoryContextMenu"> |
104 | - <menuitem name="ContextMerge" action="Merge" /> |
105 | - <menuitem name="ContextRename" action="Rename" /> |
106 | - </popup> |
107 | - |
108 | - <popup name="EventsDirectoryViewMenu" action="ViewMenu"> |
109 | - <menuitem name="DisplaySearchbar" action="CommonDisplaySearchbar" /> |
110 | - <menuitem name="DisplaySidebar" action="CommonDisplaySidebar" /> |
111 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
112 | - <separator /> |
113 | - <menuitem name="ViewComment" action="ViewComment" /> |
114 | - <separator /> |
115 | - <menu name="SortEvents" action="CommonSortEvents"> |
116 | - <menuitem name="SortEventsAscending" action="CommonSortEventsAscending" /> |
117 | - <menuitem name="SortEventsDescending" action="CommonSortEventsDescending" /> |
118 | - </menu> |
119 | - <separator /> |
120 | - <menuitem name="Fullscreen" action="CommonFullscreen" /> |
121 | - <separator /> |
122 | - <menuitem name="SelectAll" action="CommonSelectAll" /> |
123 | - </popup> |
124 | - |
125 | -</ui> |
126 | \ No newline at end of file |
127 | |
128 | === removed file 'data/ui/import.ui' |
129 | --- data/ui/import.ui 2017-01-27 00:06:44 +0000 |
130 | +++ data/ui/import.ui 1970-01-01 00:00:00 +0000 |
131 | @@ -1,22 +0,0 @@ |
132 | -<ui> |
133 | - <popup name="ImportContextMenu"> |
134 | - <menuitem name="ContextImportSelected" action="ImportSelected" /> |
135 | - <menuitem name="ContextImportAll" action="ImportAll" /> |
136 | - </popup> |
137 | - |
138 | - <popup name="ImportViewMenu"> |
139 | - <menuitem name="DisplaySearchbar" action="CommonDisplaySearchbar" /> |
140 | - <menuitem name="DisplaySidebar" action="CommonDisplaySidebar" /> |
141 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
142 | - <separator /> |
143 | - <menuitem name="ViewTitle" action="ViewTitle" /> |
144 | - <separator /> |
145 | - <menu name="SortEvents" action="CommonSortEvents"> |
146 | - <menuitem name="SortEventsAscending" action="CommonSortEventsAscending" /> |
147 | - <menuitem name="SortEventsDescending" action="CommonSortEventsDescending" /> |
148 | - </menu> |
149 | - <separator /> |
150 | - <menuitem name="SelectAll" action="CommonSelectAll" /> |
151 | - </popup> |
152 | - |
153 | -</ui> |
154 | |
155 | === removed file 'data/ui/media.ui' |
156 | --- data/ui/media.ui 2016-09-20 00:44:41 +0000 |
157 | +++ data/ui/media.ui 1970-01-01 00:00:00 +0000 |
158 | @@ -1,27 +0,0 @@ |
159 | -<ui> |
160 | - <popup name="MediaViewMenu" action="ViewMenu"> |
161 | - <menuitem name="DisplaySidebar" action="CommonDisplaySidebar" /> |
162 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
163 | - <separator /> |
164 | - <menuitem name="ViewTitle" action="ViewTitle" /> |
165 | - <menuitem name="ViewComment" action="ViewComment" /> |
166 | - <menuitem name="ViewTags" action="ViewTags" /> |
167 | - <separator /> |
168 | - <menu name="SortPhotos" action="SortPhotos"> |
169 | - <menuitem name="SortByTitle" action="SortByTitle" /> |
170 | - <menuitem name="SortByExposureDate" action="SortByExposureDate" /> |
171 | - <separator /> |
172 | - <menuitem name="SortAscending" action="SortAscending" /> |
173 | - <menuitem name="SortDescending" action="SortDescending" /> |
174 | - </menu> |
175 | - <menu name="SortEvents" action="CommonSortEvents"> |
176 | - <menuitem name="SortEventsAscending" action="CommonSortEventsAscending" /> |
177 | - <menuitem name="SortEventsDescending" action="CommonSortEventsDescending" /> |
178 | - </menu> |
179 | - <separator /> |
180 | - <placeholder name="ViewExtrasFullscreenSlideshowPlaceholder" /> |
181 | - <separator /> |
182 | - <menuitem name="SelectAll" action="CommonSelectAll" /> |
183 | - </popup> |
184 | - |
185 | -</ui> |
186 | |
187 | === removed file 'data/ui/offline.ui' |
188 | --- data/ui/offline.ui 2017-01-27 00:06:44 +0000 |
189 | +++ data/ui/offline.ui 1970-01-01 00:00:00 +0000 |
190 | @@ -1,23 +0,0 @@ |
191 | -<ui> |
192 | - <popup name="OfflineContextMenu"> |
193 | - <menuitem name="RemoveFromLibrary" action="RemoveFromLibrary" /> |
194 | - </popup> |
195 | - |
196 | - <toolbar name="OfflineToolbar"> |
197 | - <toolitem name="ToolRemoveFromLibrary" action="RemoveFromLibrary" /> |
198 | - <separator /> |
199 | - </toolbar> |
200 | - |
201 | - <popup name="OfflineViewMenu" action="ViewMenu"> |
202 | - <menuitem name="DisplaySearchbar" action="CommonDisplaySearchbar" /> |
203 | - <menuitem name="DisplaySidebar" action="CommonDisplaySidebar" /> |
204 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
205 | - <separator /> |
206 | - <menu name="SortEvents" action="CommonSortEvents"> |
207 | - <menuitem name="SortEventsAscending" action="CommonSortEventsAscending" /> |
208 | - <menuitem name="SortEventsDescending" action="CommonSortEventsDescending" /> |
209 | - </menu> |
210 | - <separator /> |
211 | - <menuitem name="SelectAll" action="CommonSelectAll" /> |
212 | - </popup> |
213 | -</ui> |
214 | |
215 | === removed file 'data/ui/photo.ui' |
216 | --- data/ui/photo.ui 2016-09-20 00:44:41 +0000 |
217 | +++ data/ui/photo.ui 1970-01-01 00:00:00 +0000 |
218 | @@ -1,27 +0,0 @@ |
219 | -<ui> |
220 | - <popup name="PhotoContextMenu"> |
221 | - <placeholder name="ContextJumpPlaceholder"> |
222 | - <menuitem name="ContextJumpToEvent" action="CommonJumpToEvent" /> |
223 | - <menuitem name="ContextJumpToFile" action="CommonJumpToFile" /> |
224 | - </placeholder> |
225 | - </popup> |
226 | - |
227 | - <popup name="PhotoViewMenu" action="ViewMenu"> |
228 | - <menuitem name="DisplaySidebar" action="CommonDisplaySidebar" /> |
229 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
230 | - <separator /> |
231 | - <menu name="SortEvents" action="CommonSortEvents"> |
232 | - <menuitem name="SortEventsAscending" action="CommonSortEventsAscending" /> |
233 | - <menuitem name="SortEventsDescending" action="CommonSortEventsDescending" /> |
234 | - </menu> |
235 | - <separator /> |
236 | - <menuitem name="ZoomFit" action="ZoomFit" /> |
237 | - <menuitem name="Zoom100" action="Zoom100" /> |
238 | - <menuitem name="Zoom200" action="Zoom200" /> |
239 | - <separator /> |
240 | - <menuitem name="Fullscreen" action="CommonFullscreen" /> |
241 | - <separator /> |
242 | - <menuitem name="Slideshow" action="Slideshow" /> |
243 | - </popup> |
244 | - |
245 | -</ui> |
246 | |
247 | === removed file 'data/ui/photo_context.ui' |
248 | --- data/ui/photo_context.ui 2016-09-20 00:44:41 +0000 |
249 | +++ data/ui/photo_context.ui 1970-01-01 00:00:00 +0000 |
250 | @@ -1,31 +0,0 @@ |
251 | -<ui> |
252 | - <popup name="PhotoContextMenu"> |
253 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
254 | - <separator /> |
255 | - <menuitem name="ContextRevert" action="Revert" /> |
256 | - <separator /> |
257 | - <menuitem name="ContextCopyColorAdjustments" action="CopyColorAdjustments" /> |
258 | - <menuitem name="ContextPasteColorAdjustments" action="PasteColorAdjustments" /> |
259 | - <separator /> |
260 | - <menuitem name="ContextFlag" action="Flag" /> |
261 | - <menu name="RawDeveloper" action="RawDeveloper"> |
262 | - <menuitem name="RawDeveloperShotwell" action="RawDeveloperShotwell" /> |
263 | - <menuitem name="RawDeveloperCamera" action="RawDeveloperCamera" /> |
264 | - </menu> |
265 | - <separator /> |
266 | - <menuitem name="AdjustDateTime" action="AdjustDateTime" /> |
267 | - <menu name="OpenWith" action="OpenWith"> |
268 | - </menu> |
269 | - <menu name="OpenWithRaw" action="OpenWithRaw"> |
270 | - </menu> |
271 | - <separator /> |
272 | - <placeholder name="ContextJumpPlaceholder" /> |
273 | - <placeholder name="PrintPlaceholder" /> |
274 | - <menuitem name="ContextExport" action="Export" /> |
275 | - <placeholder name="ContractorPlaceholder" /> |
276 | - <separator /> |
277 | - <menuitem name="RemoveFromLibrary" action="RemoveFromLibrary" /> |
278 | - <menuitem name="ContextMoveToTrash" action="MoveToTrash" /> |
279 | - </popup> |
280 | - |
281 | -</ui> |
282 | |
283 | === removed file 'data/ui/savedsearch.ui' |
284 | --- data/ui/savedsearch.ui 2011-05-03 01:36:07 +0000 |
285 | +++ data/ui/savedsearch.ui 1970-01-01 00:00:00 +0000 |
286 | @@ -1,8 +0,0 @@ |
287 | -<ui> |
288 | - <popup name="SearchContextMenu"> |
289 | - <menuitem name="ContextRenameSearch" action="RenameSearch" /> |
290 | - <menuitem name="ContextEditSearch" action="EditSearch" /> |
291 | - <menuitem name="ContextDeleteSearch" action="DeleteSearch" /> |
292 | - </popup> |
293 | - |
294 | -</ui> |
295 | |
296 | === removed file 'data/ui/search_sidebar_context.ui' |
297 | --- data/ui/search_sidebar_context.ui 2011-08-07 15:48:19 +0000 |
298 | +++ data/ui/search_sidebar_context.ui 1970-01-01 00:00:00 +0000 |
299 | @@ -1,6 +0,0 @@ |
300 | -<ui> |
301 | - <popup name="SidebarSearchContextMenu"> |
302 | - <menuitem name="NewSearch" action="CommonNewSearch" /> |
303 | - </popup> |
304 | -</ui> |
305 | - |
306 | |
307 | === removed file 'data/ui/sidebar_default_context.ui' |
308 | --- data/ui/sidebar_default_context.ui 2011-11-21 20:50:56 +0000 |
309 | +++ data/ui/sidebar_default_context.ui 1970-01-01 00:00:00 +0000 |
310 | @@ -1,7 +0,0 @@ |
311 | -<ui> |
312 | - <popup name="SidebarDefaultContextMenu"> |
313 | - <menuitem name="NewSearch" action="CommonNewSearch" /> |
314 | - <menuitem name="NewTag" action="CommonNewTag" /> |
315 | - </popup> |
316 | -</ui> |
317 | - |
318 | |
319 | === removed file 'data/ui/tag_sidebar_context.ui' |
320 | --- data/ui/tag_sidebar_context.ui 2011-08-07 15:48:19 +0000 |
321 | +++ data/ui/tag_sidebar_context.ui 1970-01-01 00:00:00 +0000 |
322 | @@ -1,6 +0,0 @@ |
323 | -<ui> |
324 | - <popup name="SidebarTagContextMenu"> |
325 | - <menuitem name="NewTag" action="CommonNewTag" /> |
326 | - </popup> |
327 | -</ui> |
328 | - |
329 | |
330 | === removed file 'data/ui/tags.ui' |
331 | --- data/ui/tags.ui 2014-08-25 06:55:28 +0000 |
332 | +++ data/ui/tags.ui 1970-01-01 00:00:00 +0000 |
333 | @@ -1,16 +0,0 @@ |
334 | -<ui> |
335 | - |
336 | - <popup name="CollectionContextMenu"> |
337 | - <placeholder name="ContextTagsPlaceholder"> |
338 | - <menuitem name="ContextRemoveTagFromPhotos" action="RemoveTagFromPhotos" /> |
339 | - </placeholder> |
340 | - </popup> |
341 | - |
342 | - <popup name="TagsContextMenu"> |
343 | - <menuitem name="ContextNewChildTag" action="NewChildTagSidebar" /> |
344 | - <separator /> |
345 | - <menuitem name="ContextDeleteTag" action="RenameTagSidebar" /> |
346 | - <menuitem name="ContextRenameTag" action="DeleteTagSidebar" /> |
347 | - </popup> |
348 | - |
349 | -</ui> |
350 | \ No newline at end of file |
351 | |
352 | === removed file 'data/ui/trash.ui' |
353 | --- data/ui/trash.ui 2017-02-01 18:26:23 +0000 |
354 | +++ data/ui/trash.ui 1970-01-01 00:00:00 +0000 |
355 | @@ -1,28 +0,0 @@ |
356 | -<ui> |
357 | - <popup name="TrashContextMenu"> |
358 | - <menuitem name="ContextDelete" action="Delete" /> |
359 | - <menuitem name="ContextRestore" action="Restore" /> |
360 | - <separator /> |
361 | - <menuitem name="ContextJumpToFile" action="CommonJumpToFile" /> |
362 | - <separator /> |
363 | - <menuitem name="ContextEmptyTrash" action="EmptyTrash" /> |
364 | - </popup> |
365 | - |
366 | - <popup name="TrashPageMenu"> |
367 | - <menuitem name="ContextEmptyTrash" action="EmptyTrash" /> |
368 | - </popup> |
369 | - |
370 | - <popup name="TrashViewMenu" action="ViewMenu"> |
371 | - <menuitem name="DisplaySearchbar" action="CommonDisplaySearchbar" /> |
372 | - <menuitem name="DisplaySidebar" action="CommonDisplaySidebar" /> |
373 | - <menuitem name="DisplayMetadataSidebar" action="CommonDisplayMetadataSidebar" /> |
374 | - <separator /> |
375 | - <menu name="SortEvents" action="CommonSortEvents"> |
376 | - <menuitem name="SortEventsAscending" action="CommonSortEventsAscending" /> |
377 | - <menuitem name="SortEventsDescending" action="CommonSortEventsDescending" /> |
378 | - </menu> |
379 | - <separator /> |
380 | - <menuitem name="SelectAll" action="CommonSelectAll" /> |
381 | - </popup> |
382 | - |
383 | -</ui> |
384 | |
385 | === modified file 'src/CollectionPage.vala' |
386 | --- src/CollectionPage.vala 2017-01-27 00:06:44 +0000 |
387 | +++ src/CollectionPage.vala 2017-02-12 02:36:55 +0000 |
388 | @@ -42,51 +42,86 @@ |
389 | private ExporterUI exporter = null; |
390 | private CollectionSearchViewFilter search_filter = new CollectionSearchViewFilter (); |
391 | private Gtk.ToggleToolButton enhance_button = null; |
392 | + private Gtk.Menu item_context_menu; |
393 | + private Gtk.Menu open_menu; |
394 | + private Gtk.Menu open_raw_menu; |
395 | + private Gtk.Menu contractor_menu; |
396 | + private Gtk.ToolButton rotate_button; |
397 | + private Gtk.ToolButton flip_button; |
398 | + |
399 | public CollectionPage (string page_name) { |
400 | base (page_name); |
401 | |
402 | get_view ().items_altered.connect (on_photos_altered); |
403 | |
404 | - init_item_context_menu ("/CollectionContextMenu"); |
405 | - init_toolbar ("/CollectionToolbar"); |
406 | - enhance_button = new Gtk.ToggleToolButton (); |
407 | - |
408 | show_all (); |
409 | } |
410 | |
411 | public override Gtk.Toolbar get_toolbar () { |
412 | if (toolbar == null) { |
413 | - base.get_toolbar (); |
414 | + toolbar = new Gtk.Toolbar (); |
415 | + toolbar.get_style_context ().add_class ("bottom-toolbar"); // for elementary theme |
416 | + toolbar.set_style (Gtk.ToolbarStyle.ICONS); |
417 | + |
418 | + var slideshow_button = new Gtk.ToolButton (null, _("S_lideshow")); |
419 | + slideshow_button.icon_name = "media-playback-start-symbolic"; |
420 | + slideshow_button.tooltip_text = _("Play a slideshow"); |
421 | + slideshow_button.clicked.connect (on_slideshow); |
422 | + toolbar.insert (slideshow_button, -1); |
423 | + |
424 | + rotate_button = new Gtk.ToolButton (null, Resources.ROTATE_CW_MENU); |
425 | + rotate_button.icon_name = Resources.CLOCKWISE; |
426 | + rotate_button.tooltip_text = Resources.ROTATE_CW_TOOLTIP; |
427 | + rotate_button.clicked.connect (on_rotate_clockwise); |
428 | + var rotate_action = get_action ("RotateClockwise"); |
429 | + rotate_action.bind_property ("sensitive", rotate_button, "sensitive", BindingFlags.SYNC_CREATE); |
430 | + toolbar.insert (rotate_button, -1); |
431 | + |
432 | + flip_button = new Gtk.ToolButton (null, Resources.HFLIP_MENU); |
433 | + flip_button.icon_name = Resources.HFLIP; |
434 | + flip_button.tooltip_text = Resources.HFLIP_TOOLTIP; |
435 | + flip_button.clicked.connect (on_flip_horizontally); |
436 | + var flip_action = get_action ("FlipHorizontally"); |
437 | + flip_action.bind_property ("sensitive", flip_button, "sensitive", BindingFlags.SYNC_CREATE); |
438 | + toolbar.insert (flip_button, -1); |
439 | + |
440 | + toolbar.insert (new Gtk.SeparatorToolItem (), -1); |
441 | + |
442 | + var publish_button = new Gtk.ToolButton (null, Resources.PUBLISH_MENU); |
443 | + publish_button.icon_name = Resources.PUBLISH; |
444 | + publish_button.tooltip_text = Resources.PUBLISH_TOOLTIP; |
445 | + publish_button.clicked.connect (on_publish); |
446 | + var publish_action = get_action ("Publish"); |
447 | + publish_action.bind_property ("sensitive", publish_button, "sensitive", BindingFlags.SYNC_CREATE); |
448 | + toolbar.insert (publish_button, -1); |
449 | + |
450 | + toolbar.insert (new Gtk.SeparatorToolItem (), -1); |
451 | + |
452 | // enhance tool |
453 | - enhance_button.icon_widget = new Gtk.Image.from_icon_name (Resources.ENHANCE, Gtk.IconSize.LARGE_TOOLBAR); |
454 | - enhance_button.set_label (Resources.ENHANCE_LABEL); |
455 | - enhance_button.set_tooltip_text (Resources.ENHANCE_TOOLTIP); |
456 | + enhance_button = new Gtk.ToggleToolButton (); |
457 | + enhance_button.icon_name = Resources.ENHANCE; |
458 | + enhance_button.label = Resources.ENHANCE_LABEL; |
459 | + enhance_button.tooltip_text = Resources.ENHANCE_TOOLTIP; |
460 | enhance_button.clicked.connect (on_enhance); |
461 | enhance_button.is_important = true; |
462 | - toolbar.insert (enhance_button, 2); |
463 | + toolbar.insert (enhance_button, -1); |
464 | |
465 | // separator to force slider to right side of toolbar |
466 | Gtk.SeparatorToolItem separator = new Gtk.SeparatorToolItem (); |
467 | separator.set_expand (true); |
468 | separator.set_draw (false); |
469 | - get_toolbar ().insert (separator, -1); |
470 | + toolbar.insert (separator, -1); |
471 | |
472 | Gtk.SeparatorToolItem drawn_separator = new Gtk.SeparatorToolItem (); |
473 | drawn_separator.set_expand (false); |
474 | drawn_separator.set_draw (true); |
475 | |
476 | - get_toolbar ().insert (drawn_separator, -1); |
477 | + toolbar.insert (drawn_separator, -1); |
478 | |
479 | // zoom slider assembly |
480 | MediaPage.ZoomSliderAssembly zoom_slider_assembly = create_zoom_slider_assembly (); |
481 | connect_slider (zoom_slider_assembly); |
482 | - get_toolbar ().insert (zoom_slider_assembly, -1); |
483 | - |
484 | - Gtk.Image start_image = new Gtk.Image.from_icon_name ("media-playback-start-symbolic", Gtk.IconSize.LARGE_TOOLBAR); |
485 | - Gtk.ToolButton slideshow_button = new Gtk.ToolButton (start_image, _("S_lideshow")); |
486 | - slideshow_button.set_tooltip_text (_("Play a slideshow")); |
487 | - slideshow_button.clicked.connect (on_slideshow); |
488 | - get_toolbar ().insert (slideshow_button, 0); |
489 | + toolbar.insert (zoom_slider_assembly, -1); |
490 | |
491 | // show metadata sidebar button |
492 | show_sidebar_button = MediaPage.create_sidebar_button (); |
493 | @@ -99,26 +134,151 @@ |
494 | return toolbar; |
495 | } |
496 | |
497 | - private static InjectionGroup create_context_menu_injectables () { |
498 | - InjectionGroup group = new InjectionGroup ("/CollectionContextMenu/EditExtrasPlaceholder"); |
499 | - |
500 | - group.add_menu_item ("Duplicate"); |
501 | - |
502 | - return group; |
503 | - } |
504 | - |
505 | - private static InjectionGroup create_view_menu_fullscreen_injectables () { |
506 | - InjectionGroup group = new InjectionGroup ("/MediaViewMenu/ViewExtrasFullscreenSlideshowPlaceholder"); |
507 | - |
508 | - group.add_menu_item ("Fullscreen", "CommonFullscreen"); |
509 | - |
510 | - return group; |
511 | - } |
512 | - |
513 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
514 | - base.init_collect_ui_filenames (ui_filenames); |
515 | - |
516 | - ui_filenames.add ("collection.ui"); |
517 | + public override Gtk.Menu? get_item_context_menu () { |
518 | + if (item_context_menu == null) { |
519 | + item_context_menu = new Gtk.Menu (); |
520 | + |
521 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
522 | + var metadata_action = get_common_action ("CommonDisplayMetadataSidebar"); |
523 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
524 | + |
525 | + var revert_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.REVERT_MENU); |
526 | + var revert_action = get_action ("Revert"); |
527 | + revert_action.bind_property ("sensitive", revert_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
528 | + revert_menu_item.activate.connect (() => revert_action.activate ()); |
529 | + |
530 | + var duplicate_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.DUPLICATE_PHOTO_MENU); |
531 | + var duplicate_action = get_action ("Duplicate"); |
532 | + duplicate_action.bind_property ("sensitive", duplicate_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
533 | + duplicate_menu_item.activate.connect (() => duplicate_action.activate ()); |
534 | + |
535 | + var copy_color_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.COPY_ADJUSTMENTS_MENU); |
536 | + var copy_color_action = get_action ("CopyColorAdjustments"); |
537 | + copy_color_action.bind_property ("sensitive", copy_color_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
538 | + copy_color_menu_item.activate.connect (() => copy_color_action.activate ()); |
539 | + |
540 | + var paste_color_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.PASTE_ADJUSTMENTS_MENU); |
541 | + var paste_color_action = get_action ("PasteColorAdjustments"); |
542 | + paste_color_action.bind_property ("sensitive", paste_color_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
543 | + paste_color_menu_item.activate.connect (() => paste_color_action.activate ()); |
544 | + |
545 | + var flag_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.FLAG_MENU); |
546 | + var flag_action = get_action ("Flag"); |
547 | + flag_action.bind_property ("sensitive", flag_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
548 | + flag_menu_item.activate.connect (() => flag_action.activate ()); |
549 | + |
550 | + var raw_developer_app_menu_item = new Gtk.MenuItem.with_mnemonic (RawDeveloper.SHOTWELL.get_label ()); |
551 | + var raw_developer_app_action = get_action ("RawDeveloperShotwell"); |
552 | + raw_developer_app_action.bind_property ("sensitive", raw_developer_app_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
553 | + raw_developer_app_menu_item.activate.connect (() => raw_developer_app_action.activate ()); |
554 | + |
555 | + var raw_developer_camera_menu_item = new Gtk.MenuItem.with_mnemonic (RawDeveloper.CAMERA.get_label ()); |
556 | + var raw_developer_camera_action = get_action ("RawDeveloperCamera"); |
557 | + raw_developer_camera_action.bind_property ("sensitive", raw_developer_camera_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
558 | + raw_developer_camera_menu_item.activate.connect (() => raw_developer_camera_action.activate ()); |
559 | + |
560 | + var raw_developer_menu_item = new Gtk.MenuItem.with_mnemonic (_("_Developer")); |
561 | + var raw_developer_action = get_action ("RawDeveloper"); |
562 | + raw_developer_action.bind_property ("sensitive", raw_developer_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
563 | + open_menu = new Gtk.Menu (); |
564 | + var raw_developer_menu = new Gtk.Menu (); |
565 | + raw_developer_menu.add (raw_developer_app_menu_item); |
566 | + raw_developer_menu.add (raw_developer_camera_menu_item); |
567 | + raw_developer_menu_item.set_submenu (raw_developer_menu); |
568 | + |
569 | + var adjust_datetime_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.ADJUST_DATE_TIME_MENU); |
570 | + var adjust_datetime_action = get_action ("AdjustDateTime"); |
571 | + adjust_datetime_action.bind_property ("sensitive", adjust_datetime_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
572 | + adjust_datetime_menu_item.activate.connect (() => adjust_datetime_action.activate ()); |
573 | + |
574 | + var open_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.OPEN_WITH_MENU); |
575 | + var open_action = get_action ("OpenWith"); |
576 | + open_action.bind_property ("sensitive", open_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
577 | + open_menu = new Gtk.Menu (); |
578 | + open_menu_item.set_submenu (open_menu); |
579 | + |
580 | + var open_raw_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.OPEN_WITH_RAW_MENU); |
581 | + var open_raw_action = get_action ("OpenWithRaw"); |
582 | + open_raw_action.bind_property ("sensitive", open_raw_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
583 | + open_raw_menu = new Gtk.Menu (); |
584 | + open_raw_menu_item.set_submenu (open_raw_menu); |
585 | + |
586 | + var new_event_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.NEW_EVENT_MENU); |
587 | + var new_event_action = get_action ("NewEvent"); |
588 | + new_event_action.bind_property ("sensitive", new_event_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
589 | + new_event_menu_item.activate.connect (() => new_event_action.activate ()); |
590 | + |
591 | + var jump_event_menu_item = new Gtk.MenuItem.with_mnemonic (_("View Eve_nt for Photo")); |
592 | + var jump_event_action = get_common_action ("CommonJumpToEvent"); |
593 | + jump_event_action.bind_property ("sensitive", jump_event_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
594 | + jump_event_menu_item.activate.connect (() => jump_event_action.activate ()); |
595 | + |
596 | + var jump_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.JUMP_TO_FILE_MENU); |
597 | + var jump_action = get_common_action ("CommonJumpToFile"); |
598 | + jump_action.bind_property ("sensitive", jump_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
599 | + jump_menu_item.activate.connect (() => jump_action.activate ()); |
600 | + |
601 | + var print_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.PRINT_MENU); |
602 | + var print_action = get_action ("Print"); |
603 | + print_action.bind_property ("sensitive", print_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
604 | + print_menu_item.activate.connect (() => print_action.activate ()); |
605 | + |
606 | + var export_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.EXPORT_MENU); |
607 | + var export_action = get_action ("Export"); |
608 | + export_action.bind_property ("sensitive", export_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
609 | + export_menu_item.activate.connect (() => export_action.activate ()); |
610 | + |
611 | + var contractor_menu_item = new Gtk.MenuItem.with_mnemonic (_("Other Actions")); |
612 | + contractor_menu = new Gtk.Menu (); |
613 | + contractor_menu_item.set_submenu (contractor_menu); |
614 | + |
615 | + var remove_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.REMOVE_FROM_LIBRARY_MENU); |
616 | + var remove_action = get_action ("RemoveFromLibrary"); |
617 | + remove_action.bind_property ("sensitive", remove_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
618 | + remove_menu_item.activate.connect (() => remove_action.activate ()); |
619 | + |
620 | + var trash_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.MOVE_TO_TRASH_MENU); |
621 | + var trash_action = get_action ("MoveToTrash"); |
622 | + trash_action.bind_property ("sensitive", trash_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
623 | + trash_menu_item.activate.connect (() => trash_action.activate ()); |
624 | + |
625 | + contractor_menu.add (print_menu_item); |
626 | + contractor_menu.add (export_menu_item); |
627 | + |
628 | + item_context_menu.add (adjust_datetime_menu_item); |
629 | + item_context_menu.add (duplicate_menu_item); |
630 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
631 | + item_context_menu.add (jump_menu_item); |
632 | + item_context_menu.add (open_menu_item); |
633 | + item_context_menu.add (open_raw_menu_item); |
634 | + item_context_menu.add (contractor_menu_item); |
635 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
636 | + item_context_menu.add (copy_color_menu_item); |
637 | + item_context_menu.add (paste_color_menu_item); |
638 | + item_context_menu.add (revert_menu_item); |
639 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
640 | + item_context_menu.add (flag_menu_item); |
641 | + item_context_menu.add (raw_developer_menu_item); |
642 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
643 | + item_context_menu.add (new_event_menu_item); |
644 | + item_context_menu.add (jump_event_menu_item); |
645 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
646 | + item_context_menu.add (metadata_menu_item); |
647 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
648 | + item_context_menu.add (remove_menu_item); |
649 | + item_context_menu.add (trash_menu_item); |
650 | + item_context_menu.show_all (); |
651 | + } |
652 | + |
653 | + populate_external_app_menu (open_menu, false); |
654 | + |
655 | + Photo? photo = (get_view ().get_selected_at (0).get_source () as Photo); |
656 | + if (photo != null && photo.get_master_file_format () == PhotoFileFormat.RAW) { |
657 | + populate_external_app_menu (open_raw_menu, true); |
658 | + } |
659 | + |
660 | + populate_contractor_menu (contractor_menu); |
661 | + return item_context_menu; |
662 | } |
663 | |
664 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
665 | @@ -198,35 +358,6 @@ |
666 | return actions; |
667 | } |
668 | |
669 | - protected override InjectionGroup[] init_collect_injection_groups () { |
670 | - InjectionGroup[] groups = base.init_collect_injection_groups (); |
671 | - |
672 | - groups += create_context_menu_injectables (); |
673 | - groups += create_view_menu_fullscreen_injectables (); |
674 | - |
675 | - return groups; |
676 | - } |
677 | - |
678 | - public override Gtk.Menu? get_item_context_menu () { |
679 | - Gtk.Menu menu = (Gtk.Menu) ui.get_widget ("/CollectionContextMenu"); |
680 | - assert (menu != null); |
681 | - |
682 | - Gtk.MenuItem open_with_menu_item = (Gtk.MenuItem) ui.get_widget ("/CollectionContextMenu/OpenWith"); |
683 | - populate_external_app_menu ((Gtk.Menu)open_with_menu_item.get_submenu (), false); |
684 | - open_with_menu_item.show (); |
685 | - |
686 | - Photo? photo = (get_view ().get_selected_at (0).get_source () as Photo); |
687 | - if (photo != null && photo.get_master_file_format () == PhotoFileFormat.RAW) { |
688 | - Gtk.MenuItem open_with_raw_menu_item = (Gtk.MenuItem) ui.get_widget ("/CollectionContextMenu/OpenWithRaw"); |
689 | - populate_external_app_menu ((Gtk.Menu)open_with_raw_menu_item.get_submenu (), true); |
690 | - open_with_raw_menu_item.show (); |
691 | - } |
692 | - |
693 | - populate_contractor_menu (menu, "/CollectionContextMenu/ContractorPlaceholder"); |
694 | - menu.show_all (); |
695 | - return menu; |
696 | - } |
697 | - |
698 | private void populate_external_app_menu (Gtk.Menu menu, bool raw) { |
699 | Gtk.MenuItem parent = menu.get_attach_widget () as Gtk.MenuItem; |
700 | SortedList<AppInfo> external_apps; |
701 | @@ -365,9 +496,10 @@ |
702 | set_action_sensitive ("Slideshow", page_has_photos && (!primary_is_video)); |
703 | set_action_sensitive ("Print", (!selection_has_videos) && has_selected); |
704 | set_action_sensitive ("Publish", has_selected); |
705 | - enhance_button.sensitive = (!selection_has_videos) && has_selected; |
706 | - |
707 | - update_enhance_toggled (); |
708 | + if (enhance_button != null) { |
709 | + enhance_button.sensitive = (!selection_has_videos) && has_selected; |
710 | + update_enhance_toggled (); |
711 | + } |
712 | } |
713 | |
714 | private void on_photos_altered (Gee.Map<DataObject, Alteration> altered) { |
715 | @@ -791,29 +923,31 @@ |
716 | } |
717 | |
718 | protected override bool on_ctrl_pressed (Gdk.EventKey? event) { |
719 | - Gtk.ToolButton? rotate_button = ui.get_widget ("/CollectionToolbar/ToolRotate") |
720 | - as Gtk.ToolButton; |
721 | - if (rotate_button != null) |
722 | - rotate_button.set_related_action (get_action ("RotateCounterclockwise")); |
723 | - |
724 | - Gtk.ToolButton? flip_button = ui.get_widget ("/CollectionToolbar/ToolFlip") |
725 | - as Gtk.ToolButton; |
726 | - if (flip_button != null) |
727 | - flip_button.set_related_action (get_action ("FlipVertically")); |
728 | + flip_button.label = Resources.VFLIP_MENU; |
729 | + flip_button.icon_name = Resources.VFLIP; |
730 | + flip_button.tooltip_text = Resources.VFLIP_TOOLTIP; |
731 | + rotate_button.label = Resources.ROTATE_CCW_MENU; |
732 | + rotate_button.icon_name = Resources.COUNTERCLOCKWISE; |
733 | + rotate_button.tooltip_text = Resources.ROTATE_CCW_TOOLTIP; |
734 | + flip_button.clicked.disconnect (on_flip_horizontally); |
735 | + flip_button.clicked.connect (on_flip_vertically); |
736 | + rotate_button.clicked.disconnect (on_rotate_clockwise); |
737 | + rotate_button.clicked.connect (on_rotate_counterclockwise); |
738 | |
739 | return base.on_ctrl_pressed (event); |
740 | } |
741 | |
742 | protected override bool on_ctrl_released (Gdk.EventKey? event) { |
743 | - Gtk.ToolButton? rotate_button = ui.get_widget ("/CollectionToolbar/ToolRotate") |
744 | - as Gtk.ToolButton; |
745 | - if (rotate_button != null) |
746 | - rotate_button.set_related_action (get_action ("RotateClockwise")); |
747 | - |
748 | - Gtk.ToolButton? flip_button = ui.get_widget ("/CollectionToolbar/ToolFlip") |
749 | - as Gtk.ToolButton; |
750 | - if (flip_button != null) |
751 | - flip_button.set_related_action (get_action ("FlipHorizontally")); |
752 | + flip_button.label = Resources.HFLIP_MENU; |
753 | + flip_button.icon_name = Resources.HFLIP; |
754 | + flip_button.tooltip_text = Resources.HFLIP_TOOLTIP; |
755 | + rotate_button.label = Resources.ROTATE_CW_MENU; |
756 | + rotate_button.icon_name = Resources.CLOCKWISE; |
757 | + rotate_button.tooltip_text = Resources.ROTATE_CW_TOOLTIP; |
758 | + flip_button.clicked.disconnect (on_flip_vertically); |
759 | + flip_button.clicked.connect (on_flip_horizontally); |
760 | + rotate_button.clicked.disconnect (on_rotate_counterclockwise); |
761 | + rotate_button.clicked.connect (on_rotate_clockwise); |
762 | |
763 | return base.on_ctrl_released (event); |
764 | } |
765 | |
766 | === modified file 'src/MediaPage.vala' |
767 | --- src/MediaPage.vala 2017-01-26 23:05:03 +0000 |
768 | +++ src/MediaPage.vala 2017-02-12 02:36:55 +0000 |
769 | @@ -156,12 +156,12 @@ |
770 | private ZoomSliderAssembly? connected_slider = null; |
771 | private DragAndDropHandler dnd_handler = null; |
772 | private MediaViewTracker tracker; |
773 | + private Gtk.Menu page_context_menu; |
774 | |
775 | public MediaPage (string page_name) { |
776 | base (page_name); |
777 | |
778 | tracker = new MediaViewTracker (get_view ()); |
779 | - init_page_context_menu ("/MediaViewMenu"); |
780 | get_view ().items_altered.connect (on_media_altered); |
781 | |
782 | get_view ().freeze_notifications (); |
783 | @@ -179,6 +179,131 @@ |
784 | dnd_handler = new DragAndDropHandler (this); |
785 | } |
786 | |
787 | + public override Gtk.Menu? get_page_context_menu () { |
788 | + if (page_context_menu == null) { |
789 | + page_context_menu = new Gtk.Menu (); |
790 | + |
791 | + var sidebar_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("S_idebar")); |
792 | + var sidebar_action = get_common_action ("CommonDisplaySidebar"); |
793 | + sidebar_action.bind_property ("active", sidebar_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
794 | + |
795 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
796 | + var metadata_action = get_common_action ("CommonDisplayMetadataSidebar"); |
797 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
798 | + |
799 | + var title_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("_Titles")); |
800 | + var title_action = get_action ("ViewTitle"); |
801 | + title_action.bind_property ("active", title_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
802 | + |
803 | + var comment_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("_Comments")); |
804 | + var comment_action = get_action ("ViewComment"); |
805 | + comment_action.bind_property ("active", comment_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
806 | + |
807 | + var tags_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Ta_gs")); |
808 | + var tags_action = get_action ("ViewTags"); |
809 | + tags_action.bind_property ("active", tags_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
810 | + |
811 | + var sort_photos_menu_item = new Gtk.MenuItem.with_mnemonic (_("Sort _Photos")); |
812 | + |
813 | + var by_title_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("By _Title")); |
814 | + var by_title_action = get_action ("SortByTitle"); |
815 | + by_title_action.bind_property ("active", by_title_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
816 | + by_title_menu_item.activate.connect (() => { |
817 | + if (by_title_menu_item.active) { |
818 | + by_title_action.activate (); |
819 | + } |
820 | + }); |
821 | + |
822 | + var by_exposure_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (by_title_menu_item, _("By Exposure _Date")); |
823 | + var by_exposure_action = get_action ("SortByExposureDate"); |
824 | + by_exposure_action.bind_property ("active", by_exposure_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
825 | + by_exposure_menu_item.activate.connect (() => { |
826 | + if (by_exposure_menu_item.active) { |
827 | + by_exposure_action.activate (); |
828 | + } |
829 | + }); |
830 | + |
831 | + var ascending_photos_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("_Ascending")); |
832 | + var ascending_photos_action = get_action ("SortAscending"); |
833 | + ascending_photos_action.bind_property ("active", ascending_photos_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
834 | + ascending_photos_menu_item.activate.connect (() => { |
835 | + if (ascending_photos_menu_item.active) { |
836 | + ascending_photos_action.activate (); |
837 | + } |
838 | + }); |
839 | + |
840 | + var descending_photos_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (ascending_photos_menu_item, _("D_escending")); |
841 | + var descending_photos_action = get_action ("SortDescending"); |
842 | + descending_photos_action.bind_property ("active", descending_photos_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
843 | + descending_photos_menu_item.activate.connect (() => { |
844 | + if (descending_photos_menu_item.active) { |
845 | + descending_photos_action.activate (); |
846 | + } |
847 | + }); |
848 | + |
849 | + var sort_photos_menu = new Gtk.Menu (); |
850 | + sort_photos_menu.add (by_title_menu_item); |
851 | + sort_photos_menu.add (by_exposure_menu_item); |
852 | + sort_photos_menu.add (new Gtk.SeparatorMenuItem ()); |
853 | + sort_photos_menu.add (ascending_photos_menu_item); |
854 | + sort_photos_menu.add (descending_photos_menu_item); |
855 | + sort_photos_menu_item.set_submenu (sort_photos_menu); |
856 | + |
857 | + var sort_menu_item = new Gtk.MenuItem.with_mnemonic (_("Sort _Events")); |
858 | + |
859 | + var ascending_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("_Ascending")); |
860 | + var ascending_action = get_common_action ("CommonSortEventsAscending"); |
861 | + ascending_action.bind_property ("active", ascending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
862 | + ascending_menu_item.activate.connect (() => { |
863 | + if (ascending_menu_item.active) { |
864 | + ascending_action.activate (); |
865 | + } |
866 | + }); |
867 | + |
868 | + var descending_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (ascending_menu_item, _("D_escending")); |
869 | + var descending_action = get_common_action ("CommonSortEventsDescending"); |
870 | + descending_action.bind_property ("active", descending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
871 | + descending_menu_item.activate.connect (() => { |
872 | + if (descending_menu_item.active) { |
873 | + descending_action.activate (); |
874 | + } |
875 | + }); |
876 | + |
877 | + var sort_menu = new Gtk.Menu (); |
878 | + sort_menu.add (ascending_menu_item); |
879 | + sort_menu.add (descending_menu_item); |
880 | + sort_menu_item.set_submenu (sort_menu); |
881 | + |
882 | + var fullscreen_menu_item = new Gtk.MenuItem.with_mnemonic (_("Fulls_creen")); |
883 | + var fullscreen_action = get_common_action ("CommonFullscreen"); |
884 | + fullscreen_action.bind_property ("sensitive", fullscreen_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
885 | + fullscreen_menu_item.activate.connect (() => fullscreen_action.activate ()); |
886 | + |
887 | + var select_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.SELECT_ALL_MENU); |
888 | + var select_action = get_common_action ("CommonSelectAll"); |
889 | + select_action.bind_property ("sensitive", select_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
890 | + select_menu_item.activate.connect (() => select_action.activate ()); |
891 | + |
892 | + page_context_menu.add (sidebar_menu_item); |
893 | + page_context_menu.add (metadata_menu_item); |
894 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
895 | + page_context_menu.add (title_menu_item); |
896 | + page_context_menu.add (comment_menu_item); |
897 | + page_context_menu.add (tags_menu_item); |
898 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
899 | + page_context_menu.add (sort_photos_menu_item); |
900 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
901 | + page_context_menu.add (sort_menu_item); |
902 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
903 | + page_context_menu.add (fullscreen_menu_item); |
904 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
905 | + page_context_menu.add (select_menu_item); |
906 | + page_context_menu.show_all (); |
907 | + } |
908 | + |
909 | + return page_context_menu; |
910 | + } |
911 | + |
912 | private static int compute_zoom_scale_increase (int current_scale) { |
913 | int new_scale = current_scale + MANUAL_STEPPING; |
914 | return new_scale.clamp (Thumbnail.MIN_SCALE, Thumbnail.MAX_SCALE); |
915 | @@ -189,12 +314,6 @@ |
916 | return new_scale.clamp (Thumbnail.MIN_SCALE, Thumbnail.MAX_SCALE); |
917 | } |
918 | |
919 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
920 | - base.init_collect_ui_filenames (ui_filenames); |
921 | - |
922 | - ui_filenames.add ("media.ui"); |
923 | - } |
924 | - |
925 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
926 | Gtk.ActionEntry[] actions = base.init_collect_action_entries (); |
927 | |
928 | @@ -749,20 +868,6 @@ |
929 | get_view ().set_comparator (comparator, predicate); |
930 | } |
931 | |
932 | - protected string get_sortby_path (int sort_by) { |
933 | - switch (sort_by) { |
934 | - case SortBy.TITLE: |
935 | - return "/MediaViewMenu/SortPhotos/SortByTitle"; |
936 | - |
937 | - case SortBy.EXPOSURE_DATE: |
938 | - return "/MediaViewMenu/SortPhotos/SortByExposureDate"; |
939 | - |
940 | - default: |
941 | - debug ("Unknown sort criteria: %d", sort_by); |
942 | - return "/MediaViewMenu/SortPhotos/SortByTitle"; |
943 | - } |
944 | - } |
945 | - |
946 | protected void sync_sort () { |
947 | // It used to be that the config and UI could both agree on what |
948 | // sort order and criteria were selected, but the sorting wouldn't |
949 | |
950 | === modified file 'src/Page.vala' |
951 | --- src/Page.vala 2017-01-12 18:13:48 +0000 |
952 | +++ src/Page.vala 2017-02-12 02:36:55 +0000 |
953 | @@ -118,7 +118,7 @@ |
954 | #endif |
955 | } |
956 | |
957 | - protected void populate_contractor_menu (Gtk.Menu menu, string placeholder_ui) { |
958 | + protected void populate_contractor_menu (Gtk.Menu menu) { |
959 | File[] files = {}; |
960 | Gee.List<Granite.Services.Contract> contracts = null; |
961 | try { |
962 | @@ -131,17 +131,9 @@ |
963 | } |
964 | // Remove old contracts |
965 | contractor_menu_items.foreach ((item) => { |
966 | - if (item != null) item.destroy (); |
967 | + if (item != null && item is ContractMenuItem) item.destroy (); |
968 | }); |
969 | |
970 | - //find where is contractor_placeholder in the menu |
971 | - Gtk.Widget holder = ui.get_widget (placeholder_ui); |
972 | - int pos = 0; |
973 | - foreach (Gtk.Widget w in menu.get_children ()) { |
974 | - if (w == holder) |
975 | - break; |
976 | - pos++; |
977 | - } |
978 | //and replace it with menu_item from contractor |
979 | for (int i = 0; i < contracts.size; i++) { |
980 | var contract = contracts.get (i); |
981 | @@ -149,7 +141,6 @@ |
982 | |
983 | menu_item = new ContractMenuItem (contract, get_view ().get_selected_sources ()); |
984 | menu.append (menu_item); |
985 | - menu.reorder_child (menu_item, pos); |
986 | contractor_menu_items.append (menu_item); |
987 | } |
988 | menu.show_all (); |
989 | @@ -1251,8 +1242,6 @@ |
990 | private const int AUTOSCROLL_TICKS_MSEC = 50; |
991 | |
992 | private CheckerboardLayout layout; |
993 | - private string item_context_menu_path = null; |
994 | - private string page_context_menu_path = null; |
995 | private string page_sidebar_menu_path = null; |
996 | private Gtk.Viewport viewport = new Gtk.Viewport (null, null); |
997 | protected CheckerboardItem anchor = null; |
998 | @@ -1313,18 +1302,10 @@ |
999 | return get_page_name (); |
1000 | } |
1001 | |
1002 | - public void init_item_context_menu (string path) { |
1003 | - item_context_menu_path = path; |
1004 | - } |
1005 | - |
1006 | public void init_page_sidebar_menu (string path) { |
1007 | page_sidebar_menu_path = path; |
1008 | } |
1009 | |
1010 | - public void init_page_context_menu (string path) { |
1011 | - page_context_menu_path = path; |
1012 | - } |
1013 | - |
1014 | public Gtk.Menu? get_context_menu () { |
1015 | // show page context menu if nothing is selected |
1016 | return (get_view ().get_selected_count () != 0) ? get_item_context_menu () : |
1017 | @@ -1332,25 +1313,7 @@ |
1018 | } |
1019 | |
1020 | public virtual Gtk.Menu? get_item_context_menu () { |
1021 | - Gtk.Menu menu = (Gtk.Menu) ui.get_widget (item_context_menu_path); |
1022 | - assert (menu != null); |
1023 | - return menu; |
1024 | - } |
1025 | - |
1026 | - public override Gtk.Menu? get_page_context_menu () { |
1027 | - if (page_context_menu_path == null) |
1028 | - return null; |
1029 | - Gtk.Menu menu = (Gtk.Menu) ui.get_widget (page_context_menu_path); |
1030 | - assert (menu != null); |
1031 | - return menu; |
1032 | - } |
1033 | - |
1034 | - public override Gtk.Menu? get_page_sidebar_menu () { |
1035 | - if (page_sidebar_menu_path == null) |
1036 | - return null; |
1037 | - Gtk.Menu menu = (Gtk.Menu) ui.get_widget (page_sidebar_menu_path); |
1038 | - assert (menu != null); |
1039 | - return menu; |
1040 | + return null; |
1041 | } |
1042 | |
1043 | protected override bool on_context_keypress () { |
1044 | |
1045 | === modified file 'src/PhotoPage.vala' |
1046 | --- src/PhotoPage.vala 2017-01-26 15:35:50 +0000 |
1047 | +++ src/PhotoPage.vala 2017-02-12 02:36:55 +0000 |
1048 | @@ -2416,6 +2416,10 @@ |
1049 | private CollectionPage? return_page = null; |
1050 | private bool return_to_collection_on_release = false; |
1051 | private LibraryPhotoPageViewFilter filter = new LibraryPhotoPageViewFilter (); |
1052 | + private Gtk.Menu open_menu; |
1053 | + private Gtk.Menu open_raw_menu; |
1054 | + private Gtk.Menu contractor_menu; |
1055 | + private Gtk.Menu item_context_menu; |
1056 | |
1057 | public LibraryPhotoPage () { |
1058 | base (LibraryPhoto.global, "Photo"); |
1059 | @@ -2486,13 +2490,6 @@ |
1060 | filter.refresh (); |
1061 | } |
1062 | |
1063 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1064 | - base.init_collect_ui_filenames (ui_filenames); |
1065 | - |
1066 | - ui_filenames.add ("photo_context.ui"); |
1067 | - ui_filenames.add ("photo.ui"); |
1068 | - } |
1069 | - |
1070 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
1071 | Gtk.ActionEntry[] actions = base.init_collect_action_entries (); |
1072 | |
1073 | @@ -2655,16 +2652,6 @@ |
1074 | return toggle_actions; |
1075 | } |
1076 | |
1077 | - protected override InjectionGroup[] init_collect_injection_groups () { |
1078 | - InjectionGroup[] groups = base.init_collect_injection_groups (); |
1079 | - |
1080 | - InjectionGroup print_group = new InjectionGroup ("/PhotoContextMenu/PrintPlaceholder"); |
1081 | - print_group.add_menu_item ("Print"); |
1082 | - groups += print_group; |
1083 | - |
1084 | - return groups; |
1085 | - } |
1086 | - |
1087 | protected override void register_radio_actions (Gtk.ActionGroup action_group) { |
1088 | // RAW developer. |
1089 | //get_config_photos_sort(out sort_order, out sort_by); // TODO: fetch default from config |
1090 | @@ -2964,23 +2951,138 @@ |
1091 | } |
1092 | |
1093 | private Gtk.Menu get_context_menu () { |
1094 | - Gtk.Menu menu = (Gtk.Menu) ui.get_widget ("/PhotoContextMenu"); |
1095 | - assert (menu != null); |
1096 | - |
1097 | - Gtk.MenuItem open_with_menu_item = (Gtk.MenuItem) ui.get_widget ("/PhotoContextMenu/OpenWith"); |
1098 | - populate_external_app_menu ((Gtk.Menu)open_with_menu_item.get_submenu (), false); |
1099 | - open_with_menu_item.show (); |
1100 | - |
1101 | - if (has_photo () && get_photo ().get_master_file_format () == PhotoFileFormat.RAW) { |
1102 | - Gtk.MenuItem open_with_raw_menu_item = (Gtk.MenuItem) ui.get_widget ("/PhotoContextMenu/OpenWithRaw"); |
1103 | - populate_external_app_menu ((Gtk.Menu)open_with_raw_menu_item.get_submenu (), true); |
1104 | - open_with_raw_menu_item.show (); |
1105 | - } |
1106 | - |
1107 | - populate_contractor_menu (menu, "/PhotoContextMenu/ContractorPlaceholder"); |
1108 | - |
1109 | - menu.show_all (); |
1110 | - return menu; |
1111 | + if (item_context_menu == null) { |
1112 | + item_context_menu = new Gtk.Menu (); |
1113 | + |
1114 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
1115 | + var metadata_action = get_common_action ("CommonDisplayMetadataSidebar"); |
1116 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1117 | + |
1118 | + var revert_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.REVERT_MENU); |
1119 | + var revert_action = get_action ("Revert"); |
1120 | + revert_action.bind_property ("sensitive", revert_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1121 | + revert_menu_item.activate.connect (() => revert_action.activate ()); |
1122 | + |
1123 | + var copy_color_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.COPY_ADJUSTMENTS_MENU); |
1124 | + var copy_color_action = get_action ("CopyColorAdjustments"); |
1125 | + copy_color_action.bind_property ("sensitive", copy_color_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1126 | + copy_color_menu_item.activate.connect (() => copy_color_action.activate ()); |
1127 | + |
1128 | + var paste_color_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.PASTE_ADJUSTMENTS_MENU); |
1129 | + var paste_color_action = get_action ("PasteColorAdjustments"); |
1130 | + paste_color_action.bind_property ("sensitive", paste_color_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1131 | + paste_color_menu_item.activate.connect (() => paste_color_action.activate ()); |
1132 | + |
1133 | + var flag_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.FLAG_MENU); |
1134 | + var flag_action = get_action ("Flag"); |
1135 | + flag_action.bind_property ("sensitive", flag_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1136 | + flag_menu_item.activate.connect (() => flag_action.activate ()); |
1137 | + |
1138 | + var raw_developer_app_menu_item = new Gtk.MenuItem.with_mnemonic (RawDeveloper.SHOTWELL.get_label ()); |
1139 | + var raw_developer_app_action = get_action ("RawDeveloperShotwell"); |
1140 | + raw_developer_app_action.bind_property ("sensitive", raw_developer_app_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1141 | + raw_developer_app_menu_item.activate.connect (() => raw_developer_app_action.activate ()); |
1142 | + |
1143 | + var raw_developer_camera_menu_item = new Gtk.MenuItem.with_mnemonic (RawDeveloper.CAMERA.get_label ()); |
1144 | + var raw_developer_camera_action = get_action ("RawDeveloperCamera"); |
1145 | + raw_developer_camera_action.bind_property ("sensitive", raw_developer_camera_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1146 | + raw_developer_camera_menu_item.activate.connect (() => raw_developer_camera_action.activate ()); |
1147 | + |
1148 | + var raw_developer_menu_item = new Gtk.MenuItem.with_mnemonic (_("_Developer")); |
1149 | + var raw_developer_action = get_action ("RawDeveloper"); |
1150 | + raw_developer_action.bind_property ("sensitive", raw_developer_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1151 | + open_menu = new Gtk.Menu (); |
1152 | + var raw_developer_menu = new Gtk.Menu (); |
1153 | + raw_developer_menu.add (raw_developer_app_menu_item); |
1154 | + raw_developer_menu.add (raw_developer_camera_menu_item); |
1155 | + raw_developer_menu_item.set_submenu (raw_developer_menu); |
1156 | + |
1157 | + var adjust_datetime_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.ADJUST_DATE_TIME_MENU); |
1158 | + var adjust_datetime_action = get_action ("AdjustDateTime"); |
1159 | + adjust_datetime_action.bind_property ("sensitive", adjust_datetime_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1160 | + adjust_datetime_menu_item.activate.connect (() => adjust_datetime_action.activate ()); |
1161 | + |
1162 | + var open_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.OPEN_WITH_MENU); |
1163 | + var open_action = get_action ("OpenWith"); |
1164 | + open_action.bind_property ("sensitive", open_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1165 | + open_menu = new Gtk.Menu (); |
1166 | + open_menu_item.set_submenu (open_menu); |
1167 | + |
1168 | + var open_raw_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.OPEN_WITH_RAW_MENU); |
1169 | + var open_raw_action = get_action ("OpenWithRaw"); |
1170 | + open_raw_action.bind_property ("sensitive", open_raw_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1171 | + open_raw_menu = new Gtk.Menu (); |
1172 | + open_raw_menu_item.set_submenu (open_raw_menu); |
1173 | + |
1174 | + var jump_event_menu_item = new Gtk.MenuItem.with_mnemonic (_("View Eve_nt for Photo")); |
1175 | + var jump_event_action = get_common_action ("CommonJumpToEvent"); |
1176 | + jump_event_action.bind_property ("sensitive", jump_event_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1177 | + jump_event_menu_item.activate.connect (() => jump_event_action.activate ()); |
1178 | + |
1179 | + var jump_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.JUMP_TO_FILE_MENU); |
1180 | + var jump_action = get_common_action ("CommonJumpToFile"); |
1181 | + jump_action.bind_property ("sensitive", jump_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1182 | + jump_menu_item.activate.connect (() => jump_action.activate ()); |
1183 | + |
1184 | + var print_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.PRINT_MENU); |
1185 | + var print_action = get_action ("Print"); |
1186 | + print_action.bind_property ("sensitive", print_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1187 | + print_menu_item.activate.connect (() => print_action.activate ()); |
1188 | + |
1189 | + var export_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.EXPORT_MENU); |
1190 | + var export_action = get_action ("Export"); |
1191 | + export_action.bind_property ("sensitive", export_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1192 | + export_menu_item.activate.connect (() => export_action.activate ()); |
1193 | + |
1194 | + var contractor_menu_item = new Gtk.MenuItem.with_mnemonic (_("Other Actions")); |
1195 | + contractor_menu = new Gtk.Menu (); |
1196 | + contractor_menu_item.set_submenu (contractor_menu); |
1197 | + |
1198 | + var remove_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.REMOVE_FROM_LIBRARY_MENU); |
1199 | + var remove_action = get_action ("RemoveFromLibrary"); |
1200 | + remove_action.bind_property ("sensitive", remove_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1201 | + remove_menu_item.activate.connect (() => remove_action.activate ()); |
1202 | + |
1203 | + var trash_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.MOVE_TO_TRASH_MENU); |
1204 | + var trash_action = get_action ("MoveToTrash"); |
1205 | + trash_action.bind_property ("sensitive", trash_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1206 | + trash_menu_item.activate.connect (() => trash_action.activate ()); |
1207 | + |
1208 | + contractor_menu.add (print_menu_item); |
1209 | + contractor_menu.add (export_menu_item); |
1210 | + |
1211 | + item_context_menu.add (adjust_datetime_menu_item); |
1212 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1213 | + item_context_menu.add (jump_menu_item); |
1214 | + item_context_menu.add (open_menu_item); |
1215 | + item_context_menu.add (open_raw_menu_item); |
1216 | + item_context_menu.add (contractor_menu_item); |
1217 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1218 | + item_context_menu.add (copy_color_menu_item); |
1219 | + item_context_menu.add (paste_color_menu_item); |
1220 | + item_context_menu.add (revert_menu_item); |
1221 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1222 | + item_context_menu.add (flag_menu_item); |
1223 | + item_context_menu.add (raw_developer_menu_item); |
1224 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1225 | + item_context_menu.add (jump_event_menu_item); |
1226 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1227 | + item_context_menu.add (metadata_menu_item); |
1228 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1229 | + item_context_menu.add (remove_menu_item); |
1230 | + item_context_menu.add (trash_menu_item); |
1231 | + item_context_menu.show_all (); |
1232 | + } |
1233 | + |
1234 | + populate_external_app_menu (open_menu, false); |
1235 | + |
1236 | + Photo? photo = (get_view ().get_selected_at (0).get_source () as Photo); |
1237 | + if (photo != null && photo.get_master_file_format () == PhotoFileFormat.RAW) { |
1238 | + populate_external_app_menu (open_raw_menu, true); |
1239 | + } |
1240 | + |
1241 | + populate_contractor_menu (contractor_menu); |
1242 | + return item_context_menu; |
1243 | } |
1244 | |
1245 | protected override bool on_context_buttonpress (Gdk.EventButton event) { |
1246 | |
1247 | === modified file 'src/camera/ImportPage.vala' |
1248 | --- src/camera/ImportPage.vala 2017-01-26 15:35:50 +0000 |
1249 | +++ src/camera/ImportPage.vala 2017-02-12 02:36:55 +0000 |
1250 | @@ -721,6 +721,9 @@ |
1251 | private HideImportedViewFilter hide_imported_filter = new HideImportedViewFilter (); |
1252 | private CameraViewTracker tracker; |
1253 | |
1254 | + private Gtk.Menu page_context_menu; |
1255 | + private Gtk.Menu import_context_menu; |
1256 | + |
1257 | #if UNITY_SUPPORT |
1258 | UnityProgressBar uniprobar = UnityProgressBar.get_instance (); |
1259 | #endif |
1260 | @@ -783,10 +786,6 @@ |
1261 | // monitor Photos for removals, as that will change the result of the ViewFilter |
1262 | LibraryPhoto.global.contents_altered.connect (on_media_added_removed); |
1263 | Video.global.contents_altered.connect (on_media_added_removed); |
1264 | - |
1265 | - init_item_context_menu ("/ImportContextMenu"); |
1266 | - init_page_sidebar_menu ("/ImportContextMenu"); |
1267 | - init_page_context_menu ("/ImportViewMenu"); |
1268 | } |
1269 | |
1270 | ~ImportPage () { |
1271 | @@ -859,6 +858,100 @@ |
1272 | return toolbar; |
1273 | } |
1274 | |
1275 | + public override Gtk.Menu? get_item_context_menu () { |
1276 | + if (import_context_menu == null) { |
1277 | + create_import_context_menu (); |
1278 | + } |
1279 | + |
1280 | + return import_context_menu; |
1281 | + } |
1282 | + |
1283 | + public override Gtk.Menu? get_page_context_menu () { |
1284 | + if (page_context_menu == null) { |
1285 | + page_context_menu = new Gtk.Menu (); |
1286 | + |
1287 | + var sidebar_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("S_idebar")); |
1288 | + var sidebar_action = get_common_action ("CommonDisplaySidebar"); |
1289 | + sidebar_action.bind_property ("active", sidebar_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1290 | + |
1291 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
1292 | + var metadata_action = get_common_action ("CommonDisplayMetadataSidebar"); |
1293 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1294 | + |
1295 | + var viewtitle_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("_Titles")); |
1296 | + var viewtitle_action = get_action ("ViewTitle"); |
1297 | + viewtitle_action.bind_property ("active", viewtitle_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1298 | + |
1299 | + var sort_menu_item = new Gtk.MenuItem.with_mnemonic (_("Sort _Events")); |
1300 | + |
1301 | + var ascending_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("_Ascending")); |
1302 | + var ascending_action = get_common_action ("CommonSortEventsAscending"); |
1303 | + ascending_action.bind_property ("active", ascending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1304 | + ascending_menu_item.activate.connect (() => { |
1305 | + if (ascending_menu_item.active) { |
1306 | + ascending_action.activate (); |
1307 | + } |
1308 | + }); |
1309 | + |
1310 | + var descending_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (ascending_menu_item, _("D_escending")); |
1311 | + var descending_action = get_common_action ("CommonSortEventsDescending"); |
1312 | + descending_action.bind_property ("active", descending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1313 | + descending_menu_item.activate.connect (() => { |
1314 | + if (descending_menu_item.active) { |
1315 | + descending_action.activate (); |
1316 | + } |
1317 | + }); |
1318 | + |
1319 | + var sort_menu = new Gtk.Menu (); |
1320 | + sort_menu.add (ascending_menu_item); |
1321 | + sort_menu.add (descending_menu_item); |
1322 | + sort_menu_item.set_submenu (sort_menu); |
1323 | + |
1324 | + var select_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.SELECT_ALL_MENU); |
1325 | + var select_action = get_common_action ("CommonSelectAll"); |
1326 | + select_action.bind_property ("sensitive", select_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1327 | + select_menu_item.activate.connect (() => select_action.activate ()); |
1328 | + |
1329 | + page_context_menu.add (sidebar_menu_item); |
1330 | + page_context_menu.add (metadata_menu_item); |
1331 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1332 | + page_context_menu.add (viewtitle_menu_item); |
1333 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1334 | + page_context_menu.add (sort_menu_item); |
1335 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1336 | + page_context_menu.add (select_menu_item); |
1337 | + page_context_menu.show_all (); |
1338 | + } |
1339 | + |
1340 | + return page_context_menu; |
1341 | + } |
1342 | + |
1343 | + public override Gtk.Menu? get_page_sidebar_menu () { |
1344 | + if (import_context_menu == null) { |
1345 | + create_import_context_menu (); |
1346 | + } |
1347 | + |
1348 | + return import_context_menu; |
1349 | + } |
1350 | + |
1351 | + private void create_import_context_menu () { |
1352 | + import_context_menu = new Gtk.Menu (); |
1353 | + |
1354 | + var selected_menu_item = new Gtk.MenuItem.with_mnemonic (_("Import _Selected")); |
1355 | + var selected_action = get_common_action ("ImportSelected"); |
1356 | + selected_action.bind_property ("sensitive", selected_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1357 | + selected_menu_item.activate.connect (() => selected_action.activate ()); |
1358 | + |
1359 | + var all_menu_item = new Gtk.MenuItem.with_mnemonic (_("Import _All")); |
1360 | + var all_action = get_common_action ("ImportAll"); |
1361 | + all_action.bind_property ("sensitive", all_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1362 | + all_menu_item.activate.connect (() => all_action.activate ()); |
1363 | + |
1364 | + import_context_menu.add (selected_menu_item); |
1365 | + import_context_menu.add (all_menu_item); |
1366 | + import_context_menu.show_all (); |
1367 | + } |
1368 | + |
1369 | public override Core.ViewTracker? get_view_tracker () { |
1370 | return tracker; |
1371 | } |
1372 | @@ -884,12 +977,6 @@ |
1373 | return ((CameraImportJob *) a)->get_exposure_time () - ((CameraImportJob *) b)->get_exposure_time (); |
1374 | } |
1375 | |
1376 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1377 | - base.init_collect_ui_filenames (ui_filenames); |
1378 | - |
1379 | - ui_filenames.add ("import.ui"); |
1380 | - } |
1381 | - |
1382 | protected override Gtk.ToggleActionEntry[] init_collect_toggle_action_entries () { |
1383 | Gtk.ToggleActionEntry[] toggle_actions = base.init_collect_toggle_action_entries (); |
1384 | |
1385 | |
1386 | === modified file 'src/direct/DirectPhotoPage.vala' |
1387 | --- src/direct/DirectPhotoPage.vala 2017-01-27 23:22:56 +0000 |
1388 | +++ src/direct/DirectPhotoPage.vala 2017-02-12 02:36:55 +0000 |
1389 | @@ -22,9 +22,13 @@ |
1390 | private DirectViewCollection? view_controller = null; |
1391 | private File current_save_dir; |
1392 | private bool drop_if_dirty = false; |
1393 | + private Gtk.Menu contractor_menu; |
1394 | + private Gtk.Menu context_menu; |
1395 | + private bool fullscreen; |
1396 | |
1397 | - public DirectPhotoPage (File file) { |
1398 | + public DirectPhotoPage (File file, bool fullscreen = false) { |
1399 | base (DirectPhoto.global, file.get_basename ()); |
1400 | + this.fullscreen = fullscreen; |
1401 | |
1402 | if (!check_editable_file (file)) { |
1403 | Application.get_instance ().panic (); |
1404 | @@ -46,13 +50,6 @@ |
1405 | DirectPhoto.global.items_altered.disconnect (on_photos_altered); |
1406 | } |
1407 | |
1408 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1409 | - base.init_collect_ui_filenames (ui_filenames); |
1410 | - |
1411 | - ui_filenames.add ("direct_context.ui"); |
1412 | - ui_filenames.add ("direct.ui"); |
1413 | - } |
1414 | - |
1415 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
1416 | Gtk.ActionEntry[] actions = base.init_collect_action_entries (); |
1417 | |
1418 | @@ -184,16 +181,6 @@ |
1419 | return actions; |
1420 | } |
1421 | |
1422 | - protected override InjectionGroup[] init_collect_injection_groups () { |
1423 | - InjectionGroup[] groups = base.init_collect_injection_groups (); |
1424 | - |
1425 | - InjectionGroup print_group = new InjectionGroup ("/DirectContextMenu/PrintPlaceholder"); |
1426 | - print_group.add_menu_item ("Print"); |
1427 | - groups += print_group; |
1428 | - |
1429 | - return groups; |
1430 | - } |
1431 | - |
1432 | private static bool check_editable_file (File file) { |
1433 | if (!FileUtils.test (file.get_path (), FileTest.EXISTS)) |
1434 | AppWindow.error_message (_ ("%s does not exist.").printf (file.get_path ())); |
1435 | @@ -227,8 +214,48 @@ |
1436 | } |
1437 | |
1438 | protected override bool on_context_buttonpress (Gdk.EventButton event) { |
1439 | - Gtk.Menu context_menu = (Gtk.Menu) ui.get_widget ("/DirectContextMenu"); |
1440 | - populate_contractor_menu (context_menu, "/DirectContextMenu/ContractorPlaceholder"); |
1441 | + if (context_menu == null) { |
1442 | + context_menu = new Gtk.Menu (); |
1443 | + |
1444 | + var revert_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.REVERT_MENU); |
1445 | + var revert_action = get_action ("Revert"); |
1446 | + revert_action.bind_property ("sensitive", revert_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1447 | + revert_menu_item.activate.connect (() => revert_action.activate ()); |
1448 | + |
1449 | + var adjust_datetime_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.ADJUST_DATE_TIME_MENU); |
1450 | + var adjust_datetime_action = get_action ("AdjustDateTime"); |
1451 | + adjust_datetime_action.bind_property ("sensitive", adjust_datetime_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1452 | + adjust_datetime_menu_item.activate.connect (() => adjust_datetime_action.activate ()); |
1453 | + |
1454 | + context_menu.add (revert_menu_item); |
1455 | + context_menu.add (new Gtk.SeparatorMenuItem ()); |
1456 | + context_menu.add (adjust_datetime_menu_item); |
1457 | + |
1458 | + if (fullscreen == false) { |
1459 | + var jump_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.JUMP_TO_FILE_MENU); |
1460 | + var jump_action = get_common_action ("CommonJumpToFile"); |
1461 | + jump_action.bind_property ("sensitive", jump_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1462 | + jump_menu_item.activate.connect (() => jump_action.activate ()); |
1463 | + |
1464 | + var print_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.PRINT_MENU); |
1465 | + var print_action = get_action ("Print"); |
1466 | + print_action.bind_property ("sensitive", print_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1467 | + print_menu_item.activate.connect (() => print_action.activate ()); |
1468 | + |
1469 | + var contractor_menu_item = new Gtk.MenuItem.with_mnemonic (_("Other Actions")); |
1470 | + contractor_menu = new Gtk.Menu (); |
1471 | + contractor_menu.add (print_menu_item); |
1472 | + contractor_menu_item.set_submenu (contractor_menu); |
1473 | + |
1474 | + context_menu.add (new Gtk.SeparatorMenuItem ()); |
1475 | + context_menu.add (jump_menu_item); |
1476 | + context_menu.add (contractor_menu_item); |
1477 | + } |
1478 | + |
1479 | + context_menu.show_all (); |
1480 | + } |
1481 | + |
1482 | + populate_contractor_menu (contractor_menu); |
1483 | popup_context_menu (context_menu, event); |
1484 | |
1485 | return true; |
1486 | @@ -287,7 +314,7 @@ |
1487 | AppWindow.get_instance ().end_fullscreen (); |
1488 | } else { |
1489 | File file = get_current_file (); |
1490 | - AppWindow.get_instance ().go_fullscreen (new DirectFullscreenPhotoPage (file)); |
1491 | + AppWindow.get_instance ().go_fullscreen (new DirectPhotoPage (file, true)); |
1492 | } |
1493 | return true; |
1494 | } |
1495 | @@ -547,15 +574,3 @@ |
1496 | return new DirectView ((DirectPhoto) source); |
1497 | } |
1498 | } |
1499 | - |
1500 | -public class DirectFullscreenPhotoPage : DirectPhotoPage { |
1501 | - public DirectFullscreenPhotoPage (File file) { |
1502 | - base (file); |
1503 | - } |
1504 | - |
1505 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1506 | - // We intentionally avoid calling the base class implementation since we don't want |
1507 | - // direct.ui. |
1508 | - ui_filenames.add ("direct_context.ui"); |
1509 | - } |
1510 | -} |
1511 | |
1512 | === modified file 'src/direct/DirectWindow.vala' |
1513 | --- src/direct/DirectWindow.vala 2017-01-12 18:13:48 +0000 |
1514 | +++ src/direct/DirectWindow.vala 2017-02-12 02:36:55 +0000 |
1515 | @@ -67,7 +67,7 @@ |
1516 | protected override void on_fullscreen () { |
1517 | File file = get_direct_page ().get_current_file (); |
1518 | |
1519 | - go_fullscreen (new DirectFullscreenPhotoPage (file)); |
1520 | + go_fullscreen (new DirectPhotoPage (file, true)); |
1521 | } |
1522 | |
1523 | public override string get_app_role () { |
1524 | |
1525 | === modified file 'src/events/EventPage.vala' |
1526 | --- src/events/EventPage.vala 2017-01-26 15:35:50 +0000 |
1527 | +++ src/events/EventPage.vala 2017-02-12 02:36:55 +0000 |
1528 | @@ -19,6 +19,7 @@ |
1529 | |
1530 | public class EventPage : CollectionPage { |
1531 | private Event page_event; |
1532 | + private Gtk.Menu page_sidebar_menu; |
1533 | |
1534 | public EventPage (Event page_event) { |
1535 | base (page_event.get_name ()); |
1536 | @@ -26,8 +27,6 @@ |
1537 | this.page_event = page_event; |
1538 | page_event.mirror_photos (get_view (), create_thumbnail); |
1539 | |
1540 | - init_page_sidebar_menu ("/EventContextMenu"); |
1541 | - |
1542 | Event.global.items_altered.connect (on_events_altered); |
1543 | } |
1544 | |
1545 | @@ -54,10 +53,20 @@ |
1546 | get_view ().halt_mirroring (); |
1547 | } |
1548 | |
1549 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1550 | - base.init_collect_ui_filenames (ui_filenames); |
1551 | - |
1552 | - ui_filenames.add ("event.ui"); |
1553 | + public override Gtk.Menu? get_page_sidebar_menu () { |
1554 | + if (page_sidebar_menu == null) { |
1555 | + page_sidebar_menu = new Gtk.Menu (); |
1556 | + |
1557 | + var rename_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.RENAME_EVENT_MENU); |
1558 | + var rename_action = get_action ("Rename"); |
1559 | + rename_action.bind_property ("sensitive", rename_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1560 | + rename_menu_item.activate.connect (() => rename_action.activate ()); |
1561 | + |
1562 | + page_sidebar_menu.add (rename_menu_item); |
1563 | + page_sidebar_menu.show_all (); |
1564 | + } |
1565 | + |
1566 | + return page_sidebar_menu; |
1567 | } |
1568 | |
1569 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
1570 | @@ -85,10 +94,6 @@ |
1571 | set_action_visible ("CommonJumpToEvent", false); |
1572 | |
1573 | base.update_actions (selected_count, count); |
1574 | - |
1575 | - // this is always valid; if the user has right-clicked in an empty area, |
1576 | - // change the comment on the event itself. |
1577 | - set_action_sensitive ("EditEventComment", true); |
1578 | } |
1579 | |
1580 | protected override void get_config_photos_sort (out bool sort_order, out int sort_by) { |
1581 | |
1582 | === modified file 'src/events/EventsDirectoryPage.vala' |
1583 | --- src/events/EventsDirectoryPage.vala 2017-01-26 15:35:50 +0000 |
1584 | +++ src/events/EventsDirectoryPage.vala 2017-02-12 02:36:55 +0000 |
1585 | @@ -54,6 +54,8 @@ |
1586 | protected ViewManager view_manager; |
1587 | |
1588 | private EventsDirectorySearchViewFilter search_filter = new EventsDirectorySearchViewFilter (); |
1589 | + private Gtk.Menu page_context_menu; |
1590 | + private Gtk.Menu item_context_menu; |
1591 | |
1592 | public EventsDirectoryPage (string page_name, ViewManager view_manager, |
1593 | Gee.Collection<Event>? initial_events) { |
1594 | @@ -67,9 +69,6 @@ |
1595 | get_view ().set_property (Event.PROP_SHOW_COMMENTS, |
1596 | Config.Facade.get_instance ().get_display_event_comments ()); |
1597 | |
1598 | - init_item_context_menu ("/EventsDirectoryContextMenu"); |
1599 | - init_page_context_menu ("/EventsDirectoryViewMenu"); |
1600 | - |
1601 | this.view_manager = view_manager; |
1602 | |
1603 | // set up page's toolbar (used by AppWindow for layout and FullscreenWindow as a popup) |
1604 | @@ -109,10 +108,87 @@ |
1605 | action.changed.disconnect (on_sort_changed); |
1606 | } |
1607 | |
1608 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1609 | - ui_filenames.add ("events_directory.ui"); |
1610 | - |
1611 | - base.init_collect_ui_filenames (ui_filenames); |
1612 | + public override Gtk.Menu? get_item_context_menu () { |
1613 | + if (item_context_menu == null) { |
1614 | + item_context_menu = new Gtk.Menu (); |
1615 | + |
1616 | + var merge_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.MERGE_MENU); |
1617 | + var merge_action = get_action ("Merge"); |
1618 | + merge_action.bind_property ("sensitive", merge_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1619 | + merge_menu_item.activate.connect (() => merge_action.activate ()); |
1620 | + |
1621 | + var rename_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.RENAME_EVENT_MENU); |
1622 | + var rename_action = get_action ("Rename"); |
1623 | + rename_action.bind_property ("sensitive", rename_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1624 | + rename_menu_item.activate.connect (() => rename_action.activate ()); |
1625 | + |
1626 | + item_context_menu.add (merge_menu_item); |
1627 | + item_context_menu.add (rename_menu_item); |
1628 | + item_context_menu.show_all (); |
1629 | + } |
1630 | + |
1631 | + return item_context_menu; |
1632 | + } |
1633 | + |
1634 | + public override Gtk.Menu? get_page_context_menu () { |
1635 | + if (page_context_menu == null) { |
1636 | + page_context_menu = new Gtk.Menu (); |
1637 | + |
1638 | + var sidebar_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("S_idebar")); |
1639 | + var sidebar_action = get_common_action ("CommonDisplaySidebar"); |
1640 | + sidebar_action.bind_property ("active", sidebar_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1641 | + |
1642 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
1643 | + var metadata_action = get_common_action ("CommonDisplayMetadataSidebar"); |
1644 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1645 | + |
1646 | + var sort_menu_item = new Gtk.MenuItem.with_mnemonic (_("Sort _Events")); |
1647 | + |
1648 | + var ascending_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("_Ascending")); |
1649 | + var ascending_action = get_common_action ("CommonSortEventsAscending"); |
1650 | + ascending_action.bind_property ("active", ascending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1651 | + ascending_menu_item.activate.connect (() => { |
1652 | + if (ascending_menu_item.active) { |
1653 | + ascending_action.activate (); |
1654 | + } |
1655 | + }); |
1656 | + |
1657 | + var descending_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (ascending_menu_item, _("D_escending")); |
1658 | + var descending_action = get_common_action ("CommonSortEventsDescending"); |
1659 | + descending_action.bind_property ("active", descending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1660 | + descending_menu_item.activate.connect (() => { |
1661 | + if (descending_menu_item.active) { |
1662 | + descending_action.activate (); |
1663 | + } |
1664 | + }); |
1665 | + |
1666 | + var sort_menu = new Gtk.Menu (); |
1667 | + sort_menu.add (ascending_menu_item); |
1668 | + sort_menu.add (descending_menu_item); |
1669 | + sort_menu_item.set_submenu (sort_menu); |
1670 | + |
1671 | + var fullscreen_menu_item = new Gtk.MenuItem.with_mnemonic (_("Fulls_creen")); |
1672 | + var fullscreen_action = get_common_action ("CommonFullscreen"); |
1673 | + fullscreen_action.bind_property ("sensitive", fullscreen_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1674 | + fullscreen_menu_item.activate.connect (() => fullscreen_action.activate ()); |
1675 | + |
1676 | + var select_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.SELECT_ALL_MENU); |
1677 | + var select_action = get_common_action ("CommonSelectAll"); |
1678 | + select_action.bind_property ("sensitive", select_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1679 | + select_menu_item.activate.connect (() => select_action.activate ()); |
1680 | + |
1681 | + page_context_menu.add (sidebar_menu_item); |
1682 | + page_context_menu.add (metadata_menu_item); |
1683 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1684 | + page_context_menu.add (sort_menu_item); |
1685 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1686 | + page_context_menu.add (fullscreen_menu_item); |
1687 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1688 | + page_context_menu.add (select_menu_item); |
1689 | + page_context_menu.show_all (); |
1690 | + } |
1691 | + |
1692 | + return page_context_menu; |
1693 | } |
1694 | |
1695 | protected static bool event_comparator_predicate (DataObject object, Alteration alteration) { |
1696 | |
1697 | === modified file 'src/library/OfflinePage.vala' |
1698 | --- src/library/OfflinePage.vala 2017-01-26 15:35:50 +0000 |
1699 | +++ src/library/OfflinePage.vala 2017-02-12 02:36:55 +0000 |
1700 | @@ -37,14 +37,12 @@ |
1701 | |
1702 | private OfflineSearchViewFilter search_filter = new OfflineSearchViewFilter (); |
1703 | private MediaViewTracker tracker; |
1704 | + private Gtk.Menu page_context_menu; |
1705 | + private Gtk.Menu page_sidebar_menu; |
1706 | |
1707 | public OfflinePage () { |
1708 | base (NAME); |
1709 | |
1710 | - init_item_context_menu ("/OfflineContextMenu"); |
1711 | - init_page_context_menu ("/OfflineViewMenu"); |
1712 | - init_toolbar ("/OfflineToolbar"); |
1713 | - |
1714 | tracker = new MediaViewTracker (get_view ()); |
1715 | |
1716 | // monitor offline and initialize view with all items in it |
1717 | @@ -60,10 +58,94 @@ |
1718 | Video.global.offline_contents_altered.disconnect (on_offline_contents_altered); |
1719 | } |
1720 | |
1721 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1722 | - base.init_collect_ui_filenames (ui_filenames); |
1723 | - |
1724 | - ui_filenames.add ("offline.ui"); |
1725 | + public override Gtk.Toolbar get_toolbar () { |
1726 | + if (toolbar == null) { |
1727 | + toolbar = new Gtk.Toolbar (); |
1728 | + toolbar.get_style_context ().add_class ("bottom-toolbar"); // for elementary theme |
1729 | + toolbar.set_style (Gtk.ToolbarStyle.ICONS); |
1730 | + |
1731 | + var remove_button = new Gtk.Button.with_mnemonic (Resources.REMOVE_FROM_LIBRARY_MENU); |
1732 | + remove_button.margin_start = remove_button.margin_end = 3; |
1733 | + remove_button.tooltip_text = Resources.DELETE_FROM_LIBRARY_TOOLTIP; |
1734 | + var remove_tool = new Gtk.ToolItem (); |
1735 | + remove_tool.add (remove_button); |
1736 | + toolbar.insert (remove_tool, -1); |
1737 | + var remove_action = get_action ("RemoveFromLibrary"); |
1738 | + remove_action.bind_property ("sensitive", remove_button, "sensitive", BindingFlags.SYNC_CREATE); |
1739 | + remove_button.clicked.connect (() => remove_action.activate ()); |
1740 | + } |
1741 | + |
1742 | + return toolbar; |
1743 | + } |
1744 | + |
1745 | + public override Gtk.Menu? get_page_sidebar_menu () { |
1746 | + if (page_sidebar_menu == null) { |
1747 | + page_sidebar_menu = new Gtk.Menu (); |
1748 | + |
1749 | + var remove_menu_item = new Gtk.CheckMenuItem.with_mnemonic (Resources.REMOVE_FROM_LIBRARY_MENU); |
1750 | + var remove_action = get_action ("RemoveFromLibrary"); |
1751 | + remove_action.bind_property ("sensitive", remove_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1752 | + remove_menu_item.activate.connect (() => remove_action.activate ()); |
1753 | + |
1754 | + page_sidebar_menu.add (remove_menu_item); |
1755 | + page_sidebar_menu.show_all (); |
1756 | + } |
1757 | + |
1758 | + return page_sidebar_menu; |
1759 | + } |
1760 | + |
1761 | + public override Gtk.Menu? get_page_context_menu () { |
1762 | + if (page_context_menu == null) { |
1763 | + page_context_menu = new Gtk.Menu (); |
1764 | + |
1765 | + var sidebar_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("S_idebar")); |
1766 | + var sidebar_action = get_common_action ("CommonDisplaySidebar"); |
1767 | + sidebar_action.bind_property ("active", sidebar_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1768 | + |
1769 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
1770 | + var metadata_action = get_common_action ("CommonDisplayMetadataSidebar"); |
1771 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1772 | + |
1773 | + var sort_menu_item = new Gtk.MenuItem.with_mnemonic (_("Sort _Events")); |
1774 | + |
1775 | + var ascending_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("_Ascending")); |
1776 | + var ascending_action = get_common_action ("CommonSortEventsAscending"); |
1777 | + ascending_action.bind_property ("active", ascending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1778 | + ascending_menu_item.activate.connect (() => { |
1779 | + if (ascending_menu_item.active) { |
1780 | + ascending_action.activate (); |
1781 | + } |
1782 | + }); |
1783 | + |
1784 | + var descending_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (ascending_menu_item, _("D_escending")); |
1785 | + var descending_action = get_common_action ("CommonSortEventsDescending"); |
1786 | + descending_action.bind_property ("active", descending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1787 | + descending_menu_item.activate.connect (() => { |
1788 | + if (descending_menu_item.active) { |
1789 | + descending_action.activate (); |
1790 | + } |
1791 | + }); |
1792 | + |
1793 | + var sort_menu = new Gtk.Menu (); |
1794 | + sort_menu.add (ascending_menu_item); |
1795 | + sort_menu.add (descending_menu_item); |
1796 | + sort_menu_item.set_submenu (sort_menu); |
1797 | + |
1798 | + var select_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.SELECT_ALL_MENU); |
1799 | + var select_action = get_common_action ("CommonSelectAll"); |
1800 | + select_action.bind_property ("sensitive", select_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1801 | + select_menu_item.activate.connect (() => select_action.activate ()); |
1802 | + |
1803 | + page_context_menu.add (sidebar_menu_item); |
1804 | + page_context_menu.add (metadata_menu_item); |
1805 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1806 | + page_context_menu.add (sort_menu_item); |
1807 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1808 | + page_context_menu.add (select_menu_item); |
1809 | + page_context_menu.show_all (); |
1810 | + } |
1811 | + |
1812 | + return page_context_menu; |
1813 | } |
1814 | |
1815 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
1816 | |
1817 | === modified file 'src/library/TrashPage.vala' |
1818 | --- src/library/TrashPage.vala 2017-02-01 18:26:23 +0000 |
1819 | +++ src/library/TrashPage.vala 2017-02-12 02:36:55 +0000 |
1820 | @@ -37,14 +37,13 @@ |
1821 | |
1822 | private TrashSearchViewFilter search_filter = new TrashSearchViewFilter (); |
1823 | private MediaViewTracker tracker; |
1824 | + private Gtk.Menu page_sidebar_menu; |
1825 | + private Gtk.Menu item_context_menu; |
1826 | + private Gtk.Menu page_context_menu; |
1827 | |
1828 | public TrashPage () { |
1829 | base (NAME); |
1830 | |
1831 | - init_item_context_menu ("/TrashContextMenu"); |
1832 | - init_page_sidebar_menu ("/TrashPageMenu"); |
1833 | - init_page_context_menu ("/TrashViewMenu"); |
1834 | - |
1835 | tracker = new MediaViewTracker (get_view ()); |
1836 | |
1837 | // monitor trashcans and initialize view with all items in them |
1838 | @@ -113,10 +112,108 @@ |
1839 | return toolbar; |
1840 | } |
1841 | |
1842 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
1843 | - base.init_collect_ui_filenames (ui_filenames); |
1844 | - |
1845 | - ui_filenames.add ("trash.ui"); |
1846 | + public override Gtk.Menu? get_item_context_menu () { |
1847 | + if (item_context_menu == null) { |
1848 | + item_context_menu = new Gtk.Menu (); |
1849 | + |
1850 | + var delete_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.DELETE_PHOTOS_MENU); |
1851 | + var delete_action = get_action ("Delete"); |
1852 | + delete_action.bind_property ("sensitive", delete_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1853 | + delete_menu_item.activate.connect (() => delete_action.activate ()); |
1854 | + |
1855 | + var restore_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.RESTORE_PHOTOS_MENU); |
1856 | + var restore_action = get_action ("Restore"); |
1857 | + restore_action.bind_property ("sensitive", restore_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1858 | + restore_menu_item.activate.connect (() => restore_action.activate ()); |
1859 | + |
1860 | + var jump_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.JUMP_TO_FILE_MENU); |
1861 | + var jump_action = get_common_action ("CommonJumpToFile"); |
1862 | + jump_action.bind_property ("sensitive", jump_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1863 | + jump_menu_item.activate.connect (() => jump_action.activate ()); |
1864 | + |
1865 | + var empty_menu_item = new Gtk.MenuItem.with_mnemonic (_("_Empty Trash")); |
1866 | + var empty_trash_action = get_action ("EmptyTrash"); |
1867 | + empty_trash_action.bind_property ("sensitive", empty_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1868 | + empty_menu_item.activate.connect (() => empty_trash_action.activate ()); |
1869 | + |
1870 | + item_context_menu.add (delete_menu_item); |
1871 | + item_context_menu.add (restore_menu_item); |
1872 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1873 | + item_context_menu.add (jump_menu_item); |
1874 | + item_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1875 | + item_context_menu.add (empty_menu_item); |
1876 | + item_context_menu.show_all (); |
1877 | + } |
1878 | + |
1879 | + return item_context_menu; |
1880 | + } |
1881 | + |
1882 | + public override Gtk.Menu? get_page_context_menu () { |
1883 | + if (page_context_menu == null) { |
1884 | + page_context_menu = new Gtk.Menu (); |
1885 | + |
1886 | + var sidebar_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("S_idebar")); |
1887 | + var sidebar_action = get_common_action ("CommonDisplaySidebar"); |
1888 | + sidebar_action.bind_property ("active", sidebar_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1889 | + |
1890 | + var metadata_menu_item = new Gtk.CheckMenuItem.with_mnemonic (_("Edit Photo In_fo")); |
1891 | + var metadata_action = (Gtk.ToggleAction)get_common_action ("CommonDisplayMetadataSidebar"); |
1892 | + metadata_action.bind_property ("active", metadata_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1893 | + |
1894 | + var sort_menu_item = new Gtk.MenuItem.with_mnemonic (_("Sort _Events")); |
1895 | + |
1896 | + var ascending_menu_item = new Gtk.RadioMenuItem.with_mnemonic (null, _("_Ascending")); |
1897 | + var ascending_action = get_common_action ("CommonSortEventsAscending"); |
1898 | + ascending_action.bind_property ("active", ascending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1899 | + ascending_menu_item.activate.connect (() => { |
1900 | + if (ascending_menu_item.active) { |
1901 | + ascending_action.activate (); |
1902 | + } |
1903 | + }); |
1904 | + |
1905 | + var descending_menu_item = new Gtk.RadioMenuItem.with_mnemonic_from_widget (ascending_menu_item, _("D_escending")); |
1906 | + var descending_action = get_common_action ("CommonSortEventsDescending"); |
1907 | + descending_action.bind_property ("active", descending_menu_item, "active", BindingFlags.SYNC_CREATE|BindingFlags.BIDIRECTIONAL); |
1908 | + descending_menu_item.activate.connect (() => { |
1909 | + if (descending_menu_item.active) { |
1910 | + descending_action.activate (); |
1911 | + } |
1912 | + }); |
1913 | + |
1914 | + var sort_menu = new Gtk.Menu (); |
1915 | + sort_menu.add (ascending_menu_item); |
1916 | + sort_menu.add (descending_menu_item); |
1917 | + sort_menu_item.set_submenu (sort_menu); |
1918 | + |
1919 | + var select_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.SELECT_ALL_MENU); |
1920 | + var select_action = get_common_action ("CommonSelectAll"); |
1921 | + select_action.bind_property ("sensitive", select_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1922 | + select_menu_item.activate.connect (() => select_action.activate ()); |
1923 | + |
1924 | + page_context_menu.add (sidebar_menu_item); |
1925 | + page_context_menu.add (metadata_menu_item); |
1926 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1927 | + page_context_menu.add (sort_menu_item); |
1928 | + page_context_menu.add (new Gtk.SeparatorMenuItem ()); |
1929 | + page_context_menu.add (select_menu_item); |
1930 | + page_context_menu.show_all (); |
1931 | + } |
1932 | + |
1933 | + return page_context_menu; |
1934 | + } |
1935 | + |
1936 | + public override Gtk.Menu? get_page_sidebar_menu () { |
1937 | + if (page_sidebar_menu == null) { |
1938 | + page_sidebar_menu = new Gtk.Menu (); |
1939 | + var empty_menu_item = new Gtk.MenuItem.with_mnemonic (_("_Empty Trash")); |
1940 | + var empty_trash_action = get_action ("EmptyTrash"); |
1941 | + empty_trash_action.bind_property ("sensitive", empty_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
1942 | + empty_menu_item.activate.connect (() => empty_trash_action.activate ()); |
1943 | + page_sidebar_menu.add (empty_menu_item); |
1944 | + page_sidebar_menu.show_all (); |
1945 | + } |
1946 | + |
1947 | + return page_sidebar_menu; |
1948 | } |
1949 | |
1950 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
1951 | |
1952 | === modified file 'src/searches/Branch.vala' |
1953 | --- src/searches/Branch.vala 2017-01-26 15:35:50 +0000 |
1954 | +++ src/searches/Branch.vala 2017-02-12 02:36:55 +0000 |
1955 | @@ -74,38 +74,22 @@ |
1956 | } |
1957 | |
1958 | public class Searches.Grouping : Sidebar.Grouping, Sidebar.Contextable { |
1959 | - private Gtk.UIManager ui = new Gtk.UIManager (); |
1960 | private Gtk.Menu? context_menu = null; |
1961 | |
1962 | public Grouping () { |
1963 | base (_ ("Smart Albums"), new ThemedIcon ("playlist-automatic")); |
1964 | - setup_context_menu (); |
1965 | } |
1966 | |
1967 | - private void setup_context_menu () { |
1968 | - Gtk.ActionGroup group = new Gtk.ActionGroup ("SidebarDefault"); |
1969 | - Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0]; |
1970 | - |
1971 | - Gtk.ActionEntry new_search = { "CommonNewSearch", null, _("New Smart Album…"), null, null, on_new_search }; |
1972 | - actions += new_search; |
1973 | - |
1974 | - group.add_actions (actions, this); |
1975 | - ui.insert_action_group (group, 0); |
1976 | - |
1977 | - File ui_file = Resources.get_ui ("search_sidebar_context.ui"); |
1978 | - try { |
1979 | - ui.add_ui_from_file (ui_file.get_path ()); |
1980 | - } catch (Error err) { |
1981 | - AppWindow.error_message ("Error loading UI file %s: %s".printf ( |
1982 | - ui_file.get_path (), err.message)); |
1983 | - Application.get_instance ().panic (); |
1984 | + public Gtk.Menu? get_sidebar_context_menu (Gdk.EventButton? event) { |
1985 | + if (context_menu == null) { |
1986 | + context_menu = new Gtk.Menu (); |
1987 | + |
1988 | + var new_search_menu_item = new Gtk.MenuItem.with_mnemonic (_("New Smart Album…")); |
1989 | + new_search_menu_item.activate.connect (() => on_new_search); |
1990 | + context_menu.add (new_search_menu_item); |
1991 | + context_menu.show_all (); |
1992 | } |
1993 | - context_menu = (Gtk.Menu) ui.get_widget ("/SidebarSearchContextMenu"); |
1994 | - |
1995 | - ui.ensure_update (); |
1996 | - } |
1997 | - |
1998 | - public Gtk.Menu? get_sidebar_context_menu (Gdk.EventButton? event) { |
1999 | + |
2000 | return context_menu; |
2001 | } |
2002 | |
2003 | |
2004 | === modified file 'src/searches/SavedSearchPage.vala' |
2005 | --- src/searches/SavedSearchPage.vala 2017-01-12 18:13:48 +0000 |
2006 | +++ src/searches/SavedSearchPage.vala 2017-02-12 02:36:55 +0000 |
2007 | @@ -35,6 +35,7 @@ |
2008 | |
2009 | // The search logic and parameters are contained in the SavedSearch. |
2010 | private SavedSearch search; |
2011 | + private Gtk.Menu page_sidebar_menu; |
2012 | |
2013 | public SavedSearchPage (SavedSearch search) { |
2014 | base (search.get_name ()); |
2015 | @@ -43,8 +44,31 @@ |
2016 | |
2017 | foreach (MediaSourceCollection sources in MediaCollectionRegistry.get_instance ().get_all ()) |
2018 | get_view ().monitor_source_collection (sources, new SavedSearchManager (this, search), null); |
2019 | - |
2020 | - init_page_sidebar_menu ("/SearchContextMenu"); |
2021 | + } |
2022 | + |
2023 | + public override Gtk.Menu? get_page_sidebar_menu () { |
2024 | + if (page_sidebar_menu == null) { |
2025 | + page_sidebar_menu = new Gtk.Menu (); |
2026 | + |
2027 | + var rename_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.RENAME_SEARCH_MENU); |
2028 | + var rename_action = get_action ("RenameSearch"); |
2029 | + rename_menu_item.activate.connect (() => rename_action.activate ()); |
2030 | + |
2031 | + var edit_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.EDIT_SEARCH_MENU); |
2032 | + var edit_action = get_action ("EditSearch"); |
2033 | + edit_menu_item.activate.connect (() => edit_action.activate ()); |
2034 | + |
2035 | + var delete_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.DELETE_SEARCH_MENU); |
2036 | + var delete_action = get_action ("DeleteSearch"); |
2037 | + delete_menu_item.activate.connect (() => delete_action.activate ()); |
2038 | + |
2039 | + page_sidebar_menu.add (rename_menu_item); |
2040 | + page_sidebar_menu.add (edit_menu_item); |
2041 | + page_sidebar_menu.add (delete_menu_item); |
2042 | + page_sidebar_menu.show_all (); |
2043 | + } |
2044 | + |
2045 | + return page_sidebar_menu; |
2046 | } |
2047 | |
2048 | protected override void get_config_photos_sort (out bool sort_order, out int sort_by) { |
2049 | @@ -55,11 +79,6 @@ |
2050 | Config.Facade.get_instance ().set_library_photos_sort (sort_order, sort_by); |
2051 | } |
2052 | |
2053 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
2054 | - base.init_collect_ui_filenames (ui_filenames); |
2055 | - ui_filenames.add ("savedsearch.ui"); |
2056 | - } |
2057 | - |
2058 | protected override Gtk.ActionEntry[] init_collect_action_entries () { |
2059 | Gtk.ActionEntry[] actions = base.init_collect_action_entries (); |
2060 | |
2061 | |
2062 | === modified file 'src/sidebar/Tree.vala' |
2063 | --- src/sidebar/Tree.vala 2017-01-26 15:35:50 +0000 |
2064 | +++ src/sidebar/Tree.vala 2017-02-12 02:36:55 +0000 |
2065 | @@ -77,7 +77,6 @@ |
2066 | typeof (bool) // PIXBUF_VISIBLE |
2067 | ); |
2068 | |
2069 | - private Gtk.UIManager ui = new Gtk.UIManager (); |
2070 | private Gtk.IconTheme icon_theme; |
2071 | private Gtk.CellRendererText text_renderer; |
2072 | private unowned ExternalDropHandler drop_handler; |
2073 | @@ -163,7 +162,6 @@ |
2074 | icon_theme = Resources.get_icon_theme_engine (); |
2075 | icon_theme.changed.connect (on_theme_change); |
2076 | |
2077 | - setup_default_context_menu (); |
2078 | get_style_context ().add_class (Granite.StyleClass.SOURCE_LIST); |
2079 | |
2080 | drag_begin.connect (on_drag_begin); |
2081 | @@ -202,32 +200,6 @@ |
2082 | return false; |
2083 | } |
2084 | |
2085 | - private void setup_default_context_menu () { |
2086 | - Gtk.ActionGroup group = new Gtk.ActionGroup ("SidebarDefault"); |
2087 | - Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0]; |
2088 | - |
2089 | - Gtk.ActionEntry new_search = { "CommonNewSearch", null, _("New Smart Album…"), null, null, on_new_search }; |
2090 | - actions += new_search; |
2091 | - |
2092 | - Gtk.ActionEntry new_tag = { "CommonNewTag", null, _("New _Tag..."), null, null, on_new_tag }; |
2093 | - actions += new_tag; |
2094 | - |
2095 | - group.add_actions (actions, this); |
2096 | - ui.insert_action_group (group, 0); |
2097 | - |
2098 | - File ui_file = Resources.get_ui ("sidebar_default_context.ui"); |
2099 | - try { |
2100 | - ui.add_ui_from_file (ui_file.get_path ()); |
2101 | - } catch (Error err) { |
2102 | - AppWindow.error_message ("Error loading UI file %s: %s".printf ( |
2103 | - ui_file.get_path (), err.message)); |
2104 | - Application.get_instance ().panic (); |
2105 | - } |
2106 | - default_context_menu = (Gtk.Menu) ui.get_widget ("/SidebarDefaultContextMenu"); |
2107 | - |
2108 | - ui.ensure_update (); |
2109 | - } |
2110 | - |
2111 | private bool has_wrapper (Sidebar.Entry entry) { |
2112 | return entry_map.has_key (entry); |
2113 | } |
2114 | @@ -901,6 +873,20 @@ |
2115 | } |
2116 | |
2117 | private bool popup_default_context_menu (Gdk.EventButton event) { |
2118 | + if (default_context_menu == null) { |
2119 | + default_context_menu = new Gtk.Menu (); |
2120 | + |
2121 | + var new_search_menu_item = new Gtk.MenuItem.with_mnemonic (_("New Smart Album…")); |
2122 | + new_search_menu_item.activate.connect (() => on_new_search); |
2123 | + |
2124 | + var new_tag_menu_item = new Gtk.MenuItem.with_mnemonic (_("New _Tag...")); |
2125 | + new_tag_menu_item.activate.connect (() => on_new_tag); |
2126 | + |
2127 | + default_context_menu.add (new_search_menu_item); |
2128 | + default_context_menu.add (new_tag_menu_item); |
2129 | + default_context_menu.show_all (); |
2130 | + } |
2131 | + |
2132 | default_context_menu.popup (null, null, null, event.button, event.time); |
2133 | return true; |
2134 | } |
2135 | |
2136 | === modified file 'src/tags/Branch.vala' |
2137 | --- src/tags/Branch.vala 2017-01-26 15:35:50 +0000 |
2138 | +++ src/tags/Branch.vala 2017-02-12 02:36:55 +0000 |
2139 | @@ -133,35 +133,10 @@ |
2140 | |
2141 | public class Tags.Grouping : Sidebar.Grouping, Sidebar.InternalDropTargetEntry, |
2142 | Sidebar.InternalDragSourceEntry, Sidebar.Contextable { |
2143 | - private Gtk.UIManager ui = new Gtk.UIManager (); |
2144 | private Gtk.Menu? context_menu = null; |
2145 | |
2146 | public Grouping () { |
2147 | base (_ ("Tags"), new ThemedIcon (Resources.ICON_TAGS)); |
2148 | - setup_context_menu (); |
2149 | - } |
2150 | - |
2151 | - private void setup_context_menu () { |
2152 | - Gtk.ActionGroup group = new Gtk.ActionGroup ("SidebarDefault"); |
2153 | - Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0]; |
2154 | - |
2155 | - Gtk.ActionEntry new_tag = { "CommonNewTag", null, Resources.NEW_CHILD_TAG_SIDEBAR_MENU, null, null, on_new_tag }; |
2156 | - actions += new_tag; |
2157 | - |
2158 | - group.add_actions (actions, this); |
2159 | - ui.insert_action_group (group, 0); |
2160 | - |
2161 | - File ui_file = Resources.get_ui ("tag_sidebar_context.ui"); |
2162 | - try { |
2163 | - ui.add_ui_from_file (ui_file.get_path ()); |
2164 | - } catch (Error err) { |
2165 | - AppWindow.error_message ("Error loading UI file %s: %s".printf ( |
2166 | - ui_file.get_path (), err.message)); |
2167 | - Application.get_instance ().panic (); |
2168 | - } |
2169 | - context_menu = (Gtk.Menu) ui.get_widget ("/SidebarTagContextMenu"); |
2170 | - |
2171 | - ui.ensure_update (); |
2172 | } |
2173 | |
2174 | public bool internal_drop_received (Gee.List<MediaSource> media) { |
2175 | @@ -191,6 +166,15 @@ |
2176 | } |
2177 | |
2178 | public Gtk.Menu? get_sidebar_context_menu (Gdk.EventButton? event) { |
2179 | + if (context_menu == null) { |
2180 | + context_menu = new Gtk.Menu (); |
2181 | + |
2182 | + var new_tag_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.NEW_CHILD_TAG_SIDEBAR_MENU); |
2183 | + new_tag_menu_item.activate.connect (() => on_new_tag); |
2184 | + context_menu.add (new_tag_menu_item); |
2185 | + context_menu.show_all (); |
2186 | + } |
2187 | + |
2188 | return context_menu; |
2189 | } |
2190 | |
2191 | |
2192 | === modified file 'src/tags/TagPage.vala' |
2193 | --- src/tags/TagPage.vala 2017-01-12 18:13:48 +0000 |
2194 | +++ src/tags/TagPage.vala 2017-02-12 02:36:55 +0000 |
2195 | @@ -19,6 +19,7 @@ |
2196 | |
2197 | public class TagPage : CollectionPage { |
2198 | private Tag tag; |
2199 | + private Gtk.Menu page_sidebar_menu; |
2200 | |
2201 | public TagPage (Tag tag) { |
2202 | base (tag.get_name ()); |
2203 | @@ -27,8 +28,6 @@ |
2204 | |
2205 | Tag.global.items_altered.connect (on_tags_altered); |
2206 | tag.mirror_sources (get_view (), create_thumbnail); |
2207 | - |
2208 | - init_page_sidebar_menu ("/TagsContextMenu"); |
2209 | } |
2210 | |
2211 | ~TagPage () { |
2212 | @@ -36,9 +35,33 @@ |
2213 | Tag.global.items_altered.disconnect (on_tags_altered); |
2214 | } |
2215 | |
2216 | - protected override void init_collect_ui_filenames (Gee.List<string> ui_filenames) { |
2217 | - base.init_collect_ui_filenames (ui_filenames); |
2218 | - ui_filenames.add ("tags.ui"); |
2219 | + public override Gtk.Menu? get_page_sidebar_menu () { |
2220 | + if (page_sidebar_menu == null) { |
2221 | + page_sidebar_menu = new Gtk.Menu (); |
2222 | + |
2223 | + var new_child_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.NEW_CHILD_TAG_SIDEBAR_MENU); |
2224 | + var new_child_action = get_action ("NewChildTagSidebar"); |
2225 | + new_child_action.bind_property ("sensitive", new_child_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
2226 | + new_child_menu_item.activate.connect (() => new_child_action.activate ()); |
2227 | + |
2228 | + var rename_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.RENAME_TAG_SIDEBAR_MENU); |
2229 | + var rename_action = get_action ("RenameTagSidebar"); |
2230 | + rename_action.bind_property ("sensitive", rename_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
2231 | + rename_menu_item.activate.connect (() => rename_action.activate ()); |
2232 | + |
2233 | + var delete_menu_item = new Gtk.MenuItem.with_mnemonic (Resources.DELETE_TAG_SIDEBAR_MENU); |
2234 | + var delete_action = get_action ("DeleteTagSidebar"); |
2235 | + delete_action.bind_property ("sensitive", delete_menu_item, "sensitive", BindingFlags.SYNC_CREATE); |
2236 | + delete_menu_item.activate.connect (() => delete_action.activate ()); |
2237 | + |
2238 | + page_sidebar_menu.add (new_child_menu_item); |
2239 | + page_sidebar_menu.add (new Gtk.SeparatorToolItem ()); |
2240 | + page_sidebar_menu.add (rename_menu_item); |
2241 | + page_sidebar_menu.add (delete_menu_item); |
2242 | + page_sidebar_menu.show_all (); |
2243 | + } |
2244 | + |
2245 | + return page_sidebar_menu; |
2246 | } |
2247 | |
2248 | public Tag get_tag () { |
Note: The next step is to move from Gtk.Action to GLib.Action