=== salem_ is now known as _salem === _salem is now known as salem_ === salem_ is now known as _salem [07:34] Morning all [08:12] hi all! I'm trying to build ubuntu clock app from bzr. But got this error: "/ubuntu-clock-app/app/ubuntu-clock-app.qml:20 module "DateTime" is not installed" [08:12] Which package I need to install? [08:28] how do I list available click chroots from command line? [08:28] is it supposed to be done just via schroot -l ? [08:29] with sudo, yes [08:29] http://paste.ubuntu.com/12139782/ [08:34] thank you, right. it's a bit confusing there's click chroot create / destroy but no list [08:48] anyone seen dpm recently? trying to get a hold of him :) [08:49] zsombi: hey, I would really appreciate if you talk with kenvandine and can coordinate between people who wrote that code for bug #1485222. I don't think I can add any value to the discussion other than ping-ponging on that bug as I already gave a simple reproducer. [08:49] bug 1485222 in ubuntu-ui-toolkit (Ubuntu) "Using ContentStore disables silently any StateSaver capability" [Undecided,New] https://launchpad.net/bugs/1485222 [08:50] didrocks: well, I wrote the code... [08:51] I'm happy to create the simple qml file which is failing if needed, it's only taking a minute for it (as per my instructions) [08:51] didrocks: I am surprised that it only appeared now... [08:51] zsombi: I can't tell you if that worked on vivid though, I didn't use the ContentStore back then [08:52] didrocks: if the ContentStore alters APP_ID or application name in some way, then StateSaver will be screwed, it won;t find the state database anymore [08:52] didrocks: but as said, unless it is getting priority for OTA, I cannot do much [08:53] do we have a process for that, is that pinging Pat basically? [08:54] so, it does mean that any bug opened and not getting management priority for the sdk are never going to be fixed? [08:54] didrocks: also, but i also means that the bug is critical, meaning it blocks core apps from being released etc [08:54] didrocks: dude, noone said that, it's just not righ tnow [08:55] karni: he's on vacation this week and next, can I help? [08:56] I'll then try to get it in the list, the other 30 bugs I opened were workaroundable at least, (even if not elegant), that one can't though, and it seems it's a pretty basic developer case [08:57] popey: I think it can wait. But have you perhaps seen any app that allows interface language switching (other than via global phone setting)? I know how to add that, but I'm not sure how well it could fit with our i18n.tr / gettext story. [08:58] karni: i haven't seen such an app [08:59] popey: okay, no prob :) cheers [09:00] so I'm getting stage=setup-start error every time I use the armhf in Qt Creator, and the schroot command there fails in mounting.. [09:00] on this new machine I don't have the ecryptfs anymore, but I guess the mounts part is still somehow broken [10:16] zsombi: I cannot override Item's visible, so we need another property for Header.visible [10:17] I had "opened" for the toolbar before, but it doesn't seem like the perfect property name [10:23] for now I'll go with readonly property opened, and functions open() and close() [10:23] hmm [10:23] or readonly property hidden, and functions show() and hide() [10:36] t1mp: exposed? [10:37] zsombi: maybe "hidden" is not so bad. Basically the Header Item is visible, but you cannot see it because it hide off the edge of the screen ;) [10:37] so there is a header but you don't see it [10:37] t1mp: that's opposite of visible, so not good [10:37] unless you scroll or call show() [10:38] zsombi: yeah, kind of the opposite.. maybe not 100% the opposite [10:38] zsombi: you are visible but you can still hide ;) [10:38] t1mp: uhm.. yoiu can be visible but hidden? [10:39] t1mp: well, visible and not exposed... almost the same [10:39] t1mp: flippedIn [10:41] zsombi: I could use visible: header.y + header.height > 0 [10:41] zsombi: but I cannot make that property readonly [10:41] t1mp: you cannot even override, it's final, ain't it? [10:41] yes [10:41] so developers can say visible = false and the header disappears, without the animation [10:42] t1mp: so you can only override it in cpp [10:42] even if I can override, it is probably confusing to do so [10:42] because the visible acts different from the visible of other Items then [10:43] t1mp: not really, because you'll document the property in the component, and will be RO [10:46] I wonder whether you ever want to set Item's visible on Header [10:46] so if the Header is part of a Page that is made not visible, qt changes the Header.visible to false as well [10:48] zsombi: header.visible would basically mean header.y + header.height > 0 [10:48] I'm thinking if there are cases where you want to use header.visible instead of header.height [10:49] t1mp: so you don't want to go for cpp [10:50] zsombi: no, not for now. Needs to be done next week ;) maybe later for performance, but I still think we should not override the visible property [10:50] t1mp: the problem with overriding visible is that you won't be able to keep the prev visible with the new one... [10:50] t1mp: but hidden is not really a good name [10:51] hmm [10:51] zsombi: this seems to work fine actually --- visible: header.y + header.height > 0 [10:52] zsombi: so I can access the visible property if I need it [10:52] and I use show() and hide() to animate the header in and out [10:52] I'm not sure if the binding breaks when Header.parent.visible is set to false and then true again [10:52] t1mp: so idf someone changes visible, you'll get the header in/out? [10:53] zsombi: no, it is just the Item.visible, so no animation [10:53] they must use show() and hide() [10:53] t1mp: what binding? on the property not, as the paret change is controlled under the hood [10:54] zsombi: if item.parent.visible is set to false, item.visible also becomes false [10:54] t1mp: the problem is that if parent is hidden, and the header visible evaluates to true, teh Header will be shown/rendered [10:54] t1mp: yes, it does, but that happens under the hood not thru setVisible() calls [10:54] zsombi: hiding the parent will override the header.visible [10:55] t1mp: check the source code, you'll see no setVisible() on child items when you set the poroperty [10:55] t1mp: so child item bindings on visible won't get broken [10:55] zsombi: ok, so then using Item.visible in Header would work fine as long as apps don't set Header.visible [10:55] yep [10:55] t1mp: but [10:56] with visible you could change the shown/hidden animations without calling show() hide() [10:56] t1mp: is there a use case when you need funcs to show/hide? [10:57] zsombi: let's call Item.visible ivis and Header.visible hvis for now [10:57] zsombi: you mean if I really need the function instead of setting hvis? [10:58] t1mp: yes [10:58] no, but using the functions and treating hvis as readonly avoid some issues with the binding [10:58] t1mp: what issues? [10:58] because setting hvis must show/hide the header, and scrolling a flickable may change the value of hvis again [10:59] t1mp: and? [10:59] t1mp: aaah, I remember now [10:59] t1mp: when Header is hidden intentionally, scrolling should not bring it back [11:00] zsombi: depends on header.locked [11:00] internally I need the show() and hide() functions for sure [11:00] t1mp: I'd rather use property than functions :( [11:00] when you are scrolling and release the flickable when the header is half-shown, [11:01] I need to call show() or hide() depending on the position of the header [11:01] setting hvis won't help, because its value might not even change [11:01] hvis would be true if only part of the header is visible [11:01] but show() always opens the header completely. And hide() hides it completely [11:01] ivis always must be true except if the header is completely hidden [11:02] t1mp: yes, I remembered it [11:03] we also have header.enabled == false when the header is not fully opened [11:04] hmm [11:04] I was thinking to use header.enabled = false to also hide the header, but maybe you don't want that as an app developer [11:04] ok let's not mix the visibility with enabled [11:04] t1mp: and even that is controlled under the hood by parent being disabled :) [11:05] Header.active? [11:06] header.active = false would animate the header out [11:06] not super obvious [11:06] Header.on [11:07] t1mp: kalikiana: oppinnion pls> should we have multiple ActionContexts active the same time or not [11:07] dialogs have open() and close() functions [11:08] zsombi: yes [11:08] I didn't check how you are doing ActionContexts, but could a Page have an ActionContext? [11:08] t1mp: kalikiana: AdaptivePageLayout can have multiple pages open, so in that sense we should... unless AdaptivePage layout IS keeping the ActionContext and not the Pages.... [11:08] then if you have multiple pages open (AdaptivePageLayout), you want all of those ActionContexts active [11:09] t1mp: yes, that's the way it is now [11:09] zsombi: yeah you could have one ActionContexts that contains the actions of all the pages, but that will get complicated [11:09] t1mp: yes, it will [11:09] when we had the unity action contexts, there was a global ActionContexts in the MainView, and local ActionContexts from the Pages [11:09] the global one was always active, and the local ones depending on the active page [11:09] t1mp: anyways, Actions get registered into the closest ActionContext found in th ehierarchy [11:09] t1mp: we have 3 now :) [11:09] 3? [11:10] a global one and two pages? [11:10] t1mp: we have sharedContext as well, which is always inactive [11:10] t1mp: global, shared and local ones [11:10] zsombi: I think the ActionContext will be easiest to use if multiple can be active at the same time [11:10] t1mp: so all Action items you declare in MainView not under an ActionManager for instance will end up in sharedContext [11:11] t1mp: we have the Dialog problem [11:11] why is sharedContext not active? [11:11] so in the Dialog you want only the Dialog's ActionContext active.. [11:11] t1mp: because the actions in that context can be triggered only if they are used in active contexts [11:11] t1mp: let's get back to shared a bit [11:12] t1mp: so, you don't want an action in shared pool to get triggered no matter if those are used or not [11:13] ahh, all actions are automatically added to a Context? [11:13] t1mp: at least that's how I thought.... [11:13] t1mp: we can get rid of the shared pool [11:13] t1mp: each action keeps track of the contexts it was added [11:14] I was thinking you have to put them in an ActionContext explicitly [11:14] hmm [11:14] instead of the sharedContext you could have the action by default in no context? [11:14] t1mp: no, otherwise we'd have a pile of apps not working at all when we introduce this [11:14] right [11:14] t1mp: so I have to find a context for them [11:14] but [11:15] if I don't put the action anywhere, that may actually work [11:15] * zsombi thinks why it introduced shared context [11:15] t1mp: basically having no context or being in shared is the same [11:15] yeah [11:15] t1mp: but a bit simplier codewise [11:16] maybe there was a sharedContext for listing them all in HUD [11:16] I haven't seen the code, but probably I would prefer no context over a disabled sharedContext that is not used [11:16] t1mp: fair enough!!! [11:16] * zsombi noted [11:17] t1mp: so, if an action is not registered in any context, it cannot be triggered [11:17] t1mp: trigger() wont emit the signal [11:18] neither shortcuts, hotkeys are going to work [11:18] t1mp: but the action is still enabled [11:18] t1mp: now, the wiestion is whether should it be enabled at all.... [11:18] question [11:19] t1mp: and there I am too, handling enabled under the hood... [11:19] t1mp: so I need oppinion on that [11:22] zsombi: let's count, 1 context per visible page in each column, 1+ global context(s), 1 component-specific context(s), popover open that's not modal, makes 5 seems like a good average number [11:23] kalikiana: you can have 2 pages active [11:23] or even more [11:23] zsombi: see my calculation :-) [11:23] kalikiana: yes [11:23] kalikiana: all active [11:23] kalikiana: then comes the Dialog [11:23] t1mp: ^ [11:23] kalikiana: t1mp: I have the "overlay" property for that [11:23] zsombi: the Dialog will disable all contexts, though [11:24] there cannot be more than one overlay active at a time [11:24] kalikiana: yes, that's what overlay is doing [11:24] zsombi: so "overlay" is looked up in the hierarchy of parents? [11:25] kalikiana: the Action's isActive() checks whether there is an active overlay set, if yes, and the action does not belong to it, it won't trigger [11:27] zsombi: looking at the branch I don't see how a Dialog with multiple context would work at all [11:28] kalikiana: right now I'm not looking up in the hierarchy, but that may make sense... [11:28] kalikiana: yes, the Dialog's overlay basically disables all its child contexts too... so this needs more love [11:29] kalikiana: perhaps a lookup in the hierarchy would be needed each time the action is activated [11:30] zsombi: I would expect that it acts more like a container. if Dialog is visible all of the contexts inside it are enabled, but nothing else [11:31] kalikiana: yes, but somehow the other containers should be disabled in Dialog case [11:31] * zsombi thinks he will restart the work on this [11:33] zsombi: might make sense to figure out at the same time as what happens to Action's declared with no explicit ActionContext [11:33] kalikiana: see above discussion with t1mp [11:34] kalikiana: so far it works the way that Action detects the actionContext property and if found, registers itself in that context [11:35] kalikiana: if none found, it registers in a sharedContext, which we just discussed there's no reason to have, as it is disabled, and that means practically like not being registered anywhere [11:35] zsombi: so if I declare an Action will it be in the context of the page, or dialog respectively? [11:36] kalikiana: if the Action is declared in teh Page, it will be in the Page's one, if in Dialog, it'll be in Dialog's [11:36] kalikiana: if declared in MainView, it will be "orphan" [11:36] kalikiana: those are the shareable actions [11:37] kalikiana: so if added to Header actions, Header will have to register those to the context [11:37] zsombi: okay, so the immediate problem is that you may have declared actions globally for re-use and they will stop working [11:37] kalikiana: I was thinking to somehow add this logic somewhere so we can apply it without any pain [11:38] zsombi: hmmm Header should work as if they are in the Page probably [11:38] kalikiana: if an action si declared as global (ActionMaanger.actions are those) those will never stop working [11:39] zsombi: you just said they will stop working if declared outside of a Page [11:39] kalikiana: yes, but the thing is that Header needs to do this per action, because Header doesn't know whether the actoins properties re locally declared or shared ones [11:39] kalikiana: there are 3 types of actions: global, shared and local ones [11:39] kalikiana: globals are registered in ActionManger's global context [11:39] kalikiana: that is always active, thus it is active no matter of where are used [11:40] kalikiana: the shared ones are declared in MainView or other common place, outside of any ActionManager [11:40] kalikiana: local actions are declared in place if use [11:40] kalikiana: like Button { action: Action {...} } [11:41] zsombi: so the shared actions are the ones that must be treated equally to global actions then, because otherwise they will silently stop working [11:41] kalikiana: well, not [11:42] kalikiana: if we follow the principle that an action is only active if in an active context, then not [11:42] kalikiana: shared (orphan) actions are not in any context [11:42] kalikiana: so then shared actions must be registered [11:43] kalikiana: they become active when they are in an active context [11:44] zsombi: yet they work just fine right now [11:44] zsombi: the "overlay" disables previous action contexts? [11:44] kalikiana: because they trigger no matter if they are active or not [11:44] zsombi: you could also have an ActionContext.exclusive property [11:45] zsombi: yes. and changing that will break them silently [11:45] kalikiana: we were talking at some point that even the action triggering should not happen if it is not in an active context [11:45] zsombi, kalikiana: I'm doing some header work, and it more and more looks like we should move Header inside the Page [11:46] I think we can even do that in 1.3 without breaking APIs [11:46] zsombi: when I'm looking at existing code I'm not expecting a perfect world. I only care that apps already out in the wild still do their job :-) [11:48] kalikiana: if we put ActionContexts in 1.2 toolkit, than they'll work [11:50] zsombi: I don't understand that sentence [11:50] can you phrase it differently? [11:50] [14:41:26] zsombi: so the shared actions are the ones that must be treated equally to global actions then, because otherwise they will silently stop working [11:51] kalikiana: shared actions are used somewhere [11:51] kalikiana: we have to update the components so they all register actions [11:51] kalikiana: we can do that for 1.2 apps as well, actually we have to [11:52] zsombi: so the actions see where they are declared and then add themselves to a context? [11:52] t1mp: yes, they do [11:52] zsombi: that can give problems if you use references to the actions somewhere else, right? [11:52] t1mp: but like Header.actions can have shared actions [11:52] yes [11:53] t1mp: unless Header declares a context inside and add the actions to that context [11:53] zsombi: for an ActionBar you can say actions: [ Action { id: ac1 }; Action { id; ac2 } ], or actions: [ac1, ac2] with ac1/2 defined somewhere else [11:53] t1mp: like I did with Sections [11:53] zsombi: you defined shared actions as those that are neither in Page, Dialog nor MainView.actionManager [11:53] zsombi: how would we know where those are declared? [11:53] I think in these cases the ActionBar or Sections needs to add the actions to a context [11:53] kalikiana: you dont' know that [11:54] zsombi, kalikiana: let's go to the hangout already, easier talking :) [11:54] kalikiana: you have to add the action to the closest context [11:54] yeah, let's use the hangout === _salem is now known as salem_ [12:18] zsombi: Hi, You were right! Bug 1486008 turned out to be a device specific issue affecting only Nexus 4. [12:18] bug 1486008 in ubuntu-ui-toolkit (Ubuntu) "leading actions width is too small making it very difficult to press on Nexus 4 (mako)" [Undecided,Confirmed] https://launchpad.net/bugs/1486008 [12:18] mzanetti: ^ [12:18] nik90: thx [12:19] I seriously thought I was going paranoid about it :P [12:20] zsombi: he is off today [12:20] * tsdgeos goes for late lunch [12:21] nik90: LOL [12:39] zsombi, i don't see how creating a ContentStore object could alter the APP_ID [12:39] it's a simple object with a couple properties [12:39] it actually does nothing [12:40] kenvandine: then I hav eno idea what can be the problem... [12:41] zsombi, yeah, it makes no sense [12:43] kenvandine, zsombi, should be easy to reproduce and poke a bit no? [12:46] cuc::Store{QStandardPaths::writableLocation(QStandardPaths::PicturesLocation) [12:46] that's all that happens in creating a store [12:46] zsombi, any chance use QStandardPaths messes something up? [12:47] actually for the app scope it does this [12:47] new cuc::Store{QStandardPaths::writableLocation(QStandardPaths::DataLocation) [12:47] kenvandine: not that I know of... [12:47] writableLocation does need the appId to create the path [12:48] but that's all internal in qt [12:48] that's literally all that's done in creating the scope [12:48] kenvandine: none of the standard paths need the app name, the QSettings does need that [12:48] whoops, store [12:48] kenvandine: and we use that to store the properties [12:48] it does [12:48] that creates a path like ~/.local/share/appId/ [12:48] not creates, uses [12:49] oh you're right... how does it get the appid in there [12:49] never mind... it doesn't [12:49] ~/.local/share [12:49] it's rather simple [12:50] so if that's causing the appId to get changed, it QStandardPaths doing it [12:50] which i doubt [12:50] get a simple example and print the value before/after? [12:51] I can do that if you want [12:51] zsombi, how did you figure out the appId changed? [12:51] i figured someone had done that [12:51] kenvandine: StateSaver not restoring the state can only happen if the state file is not found; state file nam euses app name [12:52] lets try to debug it with didrocks example [12:52] i've never used the StateSaver before myself [12:53] kenvandine: so if the ContentStore is missing, the states are restored, otherwise not, my first guess was the app name [12:53] i know messaging-app uses it, i would have thought this would have broken an app like that [12:53] right [12:53] do they use a ContentStore? [12:53] maybe not... [12:53] they use ContentHub [12:54] they do use ContentHub [12:54] zsombi: yeah, but you don't have to use the ContentStore necessarily5~ [12:54] and contentHub itself is fine [12:54] i really don't have time to debug this today though, i'm rather swamp cramming to get stuff done before the sprint [12:54] $ grep -r ContentSt * | wc -l [12:54] 0 [12:55] in messaging app [12:55] instantiating a ContentStore is just the call to QStandardPaths::writableLocation [12:55] so it would have to be that [12:55] easy to swap those [12:55] I can have a try if you want [12:56] we could just add a ContentStore to an app that we know uses StateSaver [12:56] seb128, if you have time :) [12:56] kenvandine, well, adding the ContentStore to an app that uses StateSaver isn't going to tell much, is it? [12:56] it's going to tell you that it stops working [12:57] then you are back at saying that it only call QStandardPaths::writableLocation [12:57] no? [12:57] i guess [12:57] that call is done in libcontent-hub0 [12:58] zsombi, kalikiana: Should we have a Title { property string text; property string subText" } property maybe? [12:58] so removing that would require a rebuild [12:58] header contents will be easy then: Header { ActionBar { }; Title { }; ActionBar { }; Sections { } } [13:03] t1mp: not a bad idea [13:03] t1mp: it's just thi doesn't tell how the blocks will be laid out [13:09] zsombi, is the statesaver a part of the process? where does it store the info? [13:09] or is that a service? [13:10] seb128: it is part of it, yes, and stores under XDG_RUNTIME_DIR [13:10] seb128: uses QSettings [13:10] seb128: a piece of code from StateSaver http://pastebin.ubuntu.com/12140892/ [13:11] seb128: we are not using APP_ID though, we quesry the app name from QGuiApplication [13:11] right [13:43] zsombi: yeah, it doesn't tell how they are layed out because that would be a lot of code for one line in irc :) [13:44] zsombi: so then I'm still not sure if the Header should have some default content, or the app developers have to put the stuff in there themselves [13:46] zsombi: basically it will be Header { Row { Column { ActionBar{}; Title{}; ActionBar{}; }; Sections } } [13:46] errr [13:46] I mixed up the Row and Column [13:48] we should have some default HeaderLayout [13:49] putting the components is not so hard, but you also have to get all the margins etc right [13:55] zsombi, kenvandine, do you know what that is/does [13:55] QObject::connect(&QuickUtils::instance(), &QuickUtils::deactivated, [13:55] this, &StateSaverBackend::initiateStateSaving); [13:55] "QuickUtils::deactivated" [14:11] zsombi, kenvandine, so, debugged a bit more, issue is that http://bazaar.launchpad.net/~ubuntu-sdk-team/ubuntu-ui-toolkit/trunk/view/head:/src/Ubuntu/Components/plugin/statesaverbackend_p.cpp#L44 handle only SIG2/15 and not KILL=9, at least not with the UnixSignalHandler [14:11] that callback triggers on SIGKILL though [14:11] QObject::connect(&QuickUtils::instance(), &QuickUtils::deactivated, [14:11] this, &StateSaverBackend::initiateStateSaving); [14:11] but doesn't once ContentStore is used [14:11] unsure how what that deactivated is and if it's normal to rely on it/why it stops triggering with content-hub [14:11] but it's not an env/dir issue [14:12] weird [14:12] i'm not familiar with QuickUtils [14:12] me neither [14:12] but so the proper handlers work with ContentStore [14:12] so something must be disconnecting that? [14:12] I guess [14:14] t1mp: is Title a Row { Label {} Label {} } in that case? what happens if you have head.contents? what happens if you have title in the Page? [14:14] or would this be only exposed if you manually use ActionBar? [14:15] kalikiana: Title would be something like that, yes. Only a bit more complex because when you have a lot of space horizontally, the subtitle will go to the right of the title instead of under it [14:15] seb128: I think QuickUtils::deactivated is fired when the app moves from foreground to background - it indicates that the app should save state now, as it will be suspended shortly, and possibly killed [14:16] greyback, kenvandine, is something in the sdk dealing with changing that in case of content-hub to avoid killing content hub "clients" in a transaction? [14:16] t1mp: hmm so more like a Flow. and not easy to replace. say for example an app needs custom coloring it's not as trivial to put labels in there [14:16] kalikiana: I'd say the default header in a Page would be header: Header { HeaderLayout { title: page.title } } } [14:17] kalikiana: it is getting a bit messy to put it here [14:17] kalikiana: I'll try to work it out in the API doc https://docs.google.com/document/d/1wUUKtPmRmwbUELC1BUB9l0VOAwS_zAPRSCqMopUxR1c/edit# [14:17] seb128: nothing I'm aware of, but I'm no sdk expert [14:17] seb128, we do switch focus back to the requesting app, which would background the source app [14:18] but it sounds like it's not listening for that anymore [14:18] kenvandine, well, doing the object instanciation shouldn't lead to anything like that though [14:18] getting disconnected from that signal [14:18] nope [14:18] but [14:18] it wouldn't save the state until it gets that deactivated signal [14:19] t1mp: oh, I need to look at that one. sorry, even in just 2 days off my inbox gets so full :-/ [14:19] so when it goes back to the background it should still get that [14:19] kalikiana: it is still very much work in progress [14:25] kalikiana: the HeaderLayoutStyle is tricky [14:25] kalikiana: so the HeaderLayout will have ActionBar, Title, Sections [14:25] kalikiana: all of their properties are defined in ActionBarStyle, TitleStyle (TODO), SectionsStyle [14:26] should I somehow link to those from the HeaderLayoutStyle? [14:26] zsombi: ^ [14:26] faenil: how are you doing that with the ListItem layouts? [14:26] * faenil reads backlog [14:26] faenil: or are you not using other styled components inside the ListItem layouts? [14:27] nope, not styled [14:27] faenil: to summarize, I'm thinking of APIs for the new new new Header in https://docs.google.com/document/d/1wUUKtPmRmwbUELC1BUB9l0VOAwS_zAPRSCqMopUxR1c/edit# [14:27] faenil: ok.. maybe HeaderLayout is not the correct name then [14:27] it is not just the layout, but the full contents [14:28] HeaderContentsPreset maybe.. :s [14:28] mmm, don't know :/ [14:28] good, I see more people are looking at the document [14:29] everybody feel free to comment/suggest/ask questions. Now is the time. After we land it it becomes really difficult to change the API [14:30] oh. After I ask for comments everybody closed the document.. ;) [14:31] kalikiana: I can simply put the components that I want inside the HeaderLayout, and have aliases to them to expose them to the app developer [14:32] but like that you'll have to set for example the actions like this: header.layout.trailingActionBar.actions: [ action1, action2 ] [14:32] well I can add some more aliases so that header.trailingActions would work, but only in the default Header of the Page [14:33] custom headers will need Page.header: Header { // all the contents } [14:42] kalikiana: instead of the HeaderLayout we could also have a subclass of Header that has the contents [14:48] t1mp: I'm actually starting to think, if you're basically exposing some two dozen properties, why not make it one component. since otherwise the API is just a number of aliases to almost an entire component [14:48] +1 [14:49] kalikiana: what do you mean? [14:49] kalikiana: I have the Sections and ActionBar components [14:49] kalikiana: those can now be used by themselves. And I like to re-use them in the Header [14:50] kalikiana: so if I put them in one component, to expose its properties, that component will need to have all the aliases [14:50] kalikiana: but, right. I don't like having so many aliases either... [14:50] t1mp: I mean that almost all of the alias seem to point tat the layout [14:50] at which point you could just use that [14:51] kalikiana: but the layout has the subcomponents, [14:51] kalikiana: so you have to say header.layout.leadingActionBar.actions: [] to set the leading actions [14:51] that's clear, but ugly I think [14:52] if there was a DefaultHeader that includes the subcomponents, instead of the HeaderLayout, it would be a bit shorter [14:52] but still header.leadingActionBar.actions [14:53] maybe it is not *that* bad ;) [14:53] t1mp: API-wise you're basicalling exposing a fake Header subclass through aliases [14:53] yeah, right [14:53] ah, so you meant to have the DefaultHeader which inherits from Header [14:53] yes, maybe that's good [14:54] or Header--> EmptyHeader, DefaultHeader --> Header [14:54] meh [14:54] DefaultHeader --> PageHeader? [14:54] hmm I get confused by terminology now [14:54] what is default? [14:54] Header has no contents, but takes care of scrolling/showing/hiding/.. [14:55] DefaultHeader: Header { ActionBar{}; Title{}; ActionBar{}; Sections{} } [14:55] so DefaultHeader would replace Header { HeaderLayout{} } [14:55] the naming is no good [14:56] I'll update the doc [14:56] kalikiana: ok the doc got better now :) [15:00] Elleo, do you have any thoughts on https://bugs.launchpad.net/ubuntu/+source/content-hub/+bug/1485222 [15:00] Ubuntu bug 1485222 in ubuntu-ui-toolkit (Ubuntu) "Using ContentStore disables silently any StateSaver capability" [Undecided,New] [15:01] t1mp: will navigationActions become public? if not, where do you set them? [15:01] assuming Tabs gets replaced and there will be a new API for it [15:02] kalikiana: yeah.. I'm still thinking about that one [15:02] kalikiana: AdaptivePageLayout internally can determine for each page whether there should be a back button [15:02] kalikiana: it would be nice if it can somehow set that for the page header, but only if the app developer doesn't give a custom back action [15:03] t1mp: should page.header.leadingActionBar.actions [15:03] kalikiana: how does your sentence end? [15:04] zsombi, the hub client does have an event filter, but that would effect anything using the content-hub [15:04] http://bazaar.launchpad.net/~phablet-team/content-hub/trunk/view/head:/src/com/ubuntu/content/hub.cpp#L82 [15:04] t1mp: work with the header subclass? that would be one (awkward) way to set the navigation actions then. otherwise it'd have to be for example Page.navigationActions [15:04] kalikiana: currently the headerstyle looks for some special properties that were attached by the AdaptivePageLayout, or PageStack/Tabs and then gets the action from there, if there is no backAction defined [15:04] zsombi, it's used so if an application needs to respond to a transfer request, and it's already running it calls the handler when activated [15:05] kenvandine: my guess is it's the hub installing an event filter [15:05] t1mp: unlike the back action there is no new API for navigation actions [15:05] Elleo, but it only breaks with a ContentStore [15:05] kenvandine: contentstore instantiates a hub object, and it looks like the hub install an event filter [15:05] not with anything else [15:05] yeah, but anything with a hub instance does that [15:05] not just a ContentStore [15:05] kenvandine: oh, so this doesn't happen if you have other things? that's odd :/ [15:06] kalikiana: right. It needs more thought. And also designs. I don't even know if only Actions will be enough, what if they need something completely different in the overflow panel on the left [15:06] didrocks said it works if you use the hub without a content store [15:06] because the contentstore barely does anything [15:06] i know right? [15:06] it literally just calls QStandardPaths::writablePath [15:07] t1mp: yeah. you'd potentially want a property PageHeader.leadingPanel [15:07] kenvandine: I'd suggest double checking that, the hub's event filter looks like it swallows QEvent::ApplicationDeactivate [15:07] yeah [15:07] kenvandine: which from the bug report sounds like is the underlying issue [15:07] didrocks, are you sure it works without a ContentStore but using the content-hub? [15:07] I'm sure, I did test that explicitely [15:07] return QObject::eventFilter(obj, event); [15:07] i'm thinking on deactive it should return that [15:08] (and spent some extensive time to find the exact component failing it) [15:08] t1mp: which might be a component that uses list item layouts rather than just actions [15:08] didrocks, all very puzzling [15:08] it's like the simplest component we have :) [15:08] I guess reading from the discussion here :p [15:08] with no logic [15:08] kenvandine: yeah, that's what it does for all other events, was there some explicit reason for swallowing the deactivate signal though? [15:08] kalikiana: I plan to add delegate and overflowDelegate properties to the ActionBar [15:08] Elleo, i don't think so [15:08] but it's really easily reproduceable, like less than a minute to setup the example [15:09] and seb128 confirmed :) [15:09] kalikiana: that would solve custom panels, except if there need to be subtitles grouping the actions in the panel [15:09] Elleo, but it does check for that explicitly [15:09] * kenvandine wonders why [15:10] didrocks, yeah, thanks to seb128's debugging we found it's not getting this signal [15:10] that was super helpful [15:10] kalikiana: so, page.header.leadingActionBar.overflowDelegate can then be used to change the looks of the leading panel [15:10] but now i'm thinking any hub client should fail to save state... [15:10] this has nothing to do with ContentStore [15:10] anything with a hub instance [15:10] however, they do work in my case (I really just disabled this component) [15:10] like, commenting only that [15:11] Elleo, i probably shouldn't be returning true there even on activated [15:11] and not the whole ContentHub other's components [15:11] just HandlerActive and move on [15:11] didrocks, i'll get a build of the hub with this not swallowing the event [15:12] would be an interesting data point [15:12] kalikiana: for even more custom panels, they don't have to use the PageHeader, but they can use an empty Header where they put their own buttons and panels [15:12] kenvandine: well maybe you should be calling Object::eventFilter on activated as well unless it's deliberately not wanting to do anything from the QObject event handler there? [15:12] Elleo, do you agree that i should just remove that return true when ApplicationActivate ? [15:12] kalikiana: of course, more custom stuff will require more work for the apps [15:12] Elleo, so you do agree :) [15:12] i can just remove that return true [15:13] kenvandine: yeah [15:13] and remove the deactivate too [15:15] t1mp: the main drawback would be to mimic the rest of the header, especially the title/subtitle which is getting more complex [15:15] kalikiana: let me add the Title component to the doc :) [15:15] that wouldn't be very nice if it becomes common [15:16] https://code.launchpad.net/~ken-vandine/content-hub/dont_swallow_deactivate/+merge/268770 [15:16] we can test the debs from that [15:17] t1mp: on a side note, I'm intimidated by that penguin who is staring at me now hile I'm reading your doc [15:17] kenvandine: okay, cool [15:17] kenvandine: might it be worth keeping that warning? [15:17] kalikiana: http://www.lowbyte.com/albums/2006-01-27-GaAquarium/web_PenguinStare_30_5037.sized.jpg [15:18] haha, that is not helping :-D [15:19] t1mp: so, even if Title is a component, I'm still not sure how you would place it. as soon as you don't use the ActionBar on the left you're forced to build all of the header [15:19] [16:55:51] zsombi, kenvandine, do you know what that is/does [15:19] [16:55:52] QObject::connect(&QuickUtils::instance(), &QuickUtils::deactivated, [15:19] [16:55:52] this, &StateSaverBackend::initiateStateSaving); [15:19] [16:55:59] "QuickUtils::deactivated" [15:19] seb128: kenvandine: initiates state saving when teh app deactivates [15:19] i.e. goes background [15:19] zsombi, so when it's sigkilled nothing is saving state? [15:19] t1mp: ie since the type is leadingActionBar you need to have a custom component doing anchoring or other means to place all the components [15:20] kalikiana: no, if the left actionbar has no actions it is invisible [15:20] zsombi, i think the hub client instance was swalling the deactivated signal [15:20] seb128, the sigkill comes from the kernels OOM killer ... [15:20] which means it wouldn't work with anything that uses the content-hub [15:20] you would have to inject the state saving in the kernel somehow for that [15:20] kalikiana: PageHeader will position all its contents [15:20] ogra_, right, but statehandler doesn't have an handler for 9, just for 2 and 15 [15:20] but didrocks says it does work [15:20] kalikiana: I don't see the problem with that [15:20] kenvandine: ahha.... QuikcUtils::deactivated comes when the application state changes... [15:21] t1mp: you're saying you would use PageHeader and put a DekkoPanel (made up the name) inside? how then do you know its size and margins? [15:21] kalikiana: it will have two ActionBars, a Title, and a Sections. But the ActionBars and Sections will be invisible when they don't have contents [15:21] zsombi, i'm not sure my eventFilter is keeping you from seeing the signal though [15:21] https://code.launchpad.net/~ken-vandine/content-hub/dont_swallow_deactivate/+merge/268770 [15:21] zsombi, that's my attempt to fix it [15:21] but really, if that was eating it, it would eat it for all content-hub use [15:21] not just ContentStore [15:21] kalikiana: right. If you want a completely custom panel like Dekko, then you have to use the empty Header and do all the layouting yourself. [15:22] kalikiana: hold on, there is a way around that [15:22] seb128, the state should have been saved before it was killed [15:22] seb128, though i think we can assume that a foreground app doesnt get killed ... which means the state saver kicked in already when you de-focused it [15:22] kenvandine: ahha, here you go: http://bazaar.launchpad.net/~ubuntu-sdk-team/ubuntu-ui-toolkit/staging/view/head:/src/Ubuntu/Components/plugin/quickutils.cpp#L47 [15:22] t1mp: that is what I mean. and note I only want to replace the leading action bar in this example, nothing else. but I see no way to only replace that.. [15:23] kalikiana: page.header.leadingActionBar.delegate: DekkoButton { onClicked: popups.open("DekkoPanel.qml") } [15:23] ogra_, right, expect when you try on a desktop with xkill ;-) [15:23] desktops ... pfft :P [15:23] ogra_, same on a phone in windows mode I guess [15:23] yeah, but there we turn off the lifecycle, dont we ? [15:24] t1mp: hmmm I didn't think of that. so that would allow you to have a special button as well as a panel easily. I like it [15:24] ogra_: when an app goes background, it saves the states, yes [15:24] I mean StateSaver does it [15:24] right [15:25] kalikiana: ActionBar.delegate property still needs to be added, but we'll probably need that anyway [15:25] kenvandine, didrocks, zsombi, similar problem if you add a ContentPeer isntead of a ContentStore [15:26] so not specific to ContentStore [15:26] kalikiana: I think I will need about 10 MRs to get all the new features in ;) [15:26] seb128: so the event is consumed there too? (accepted) [15:26] seb128: that's good, makes much more sense then :) [15:26] yes [15:26] :) [15:26] zsombi: it's consumed by the main hub object, so anything that creates a hub object should cause this [15:26] obviously [15:27] t1mp: then go ahead with [15:27] t1mp: are you trying to do similar layouting as for the ListItemLayout? [15:28] seb128, that makes sense then [15:28] t1mp: I can already picture a certain someone going "is it ready" yet every week? ;-) [15:29] kalikiana: evry designer will :D [15:29] +e [15:29] t1mp: maybe the delegate isn't even that urgent, at least for now, as long as showing the custom overflow can be done by trigger from an action [15:32] seb128, didrocks: i just confirmed statesaving doesn't seem to be working in messaging-app anymore [15:32] zsombi: I was trying, but after discussing with kalikiana above we thought it is simpler to have a Header without contents, and a PageHeader that includes the standard layout for the header [15:33] kalikiana: you need the delegate, because the popover needs a reference to the button that it should be pointing to [15:33] kenvandine, let's see what it does once your fix is built ;-) [15:33] kalikiana: it cannot point to the Action [15:33] kalikiana: adding the delegate is a small addition for the ActionBar [15:34] zsombi: see https://docs.google.com/document/d/1wUUKtPmRmwbUELC1BUB9l0VOAwS_zAPRSCqMopUxR1c/edit# [15:34] t1mp: oh. I was sort of assuming an overflow that would cover the buttons anyway. but actually I can think of a ways where the design would require it depending on how it's shown [15:34] so that would indeed be needed [15:35] seb128, nevermind... the messaging-app statesaver support never landed [15:35] so that explains why that's not saving :) [15:35] k, shame :-/ [15:36] but yeah, the content hub issue only blocks saving when the app is swapped out [15:36] the unix signal handler still work [15:36] kalikiana: what do you mean with an overflow that would cover the buttons? [15:36] which is what closing from the switcher or oom does [15:36] kalikiana: ah, right.. [15:36] kalikiana: got it. If the popup does not have a pointer pointing at the button then you don't need the delegate [15:37] seb128, right, but it should get the deactivate before that [15:37] right [15:38] * t1mp gotta go. Feel free to comment on the API doc. [15:38] t1mp: at least the current dekko opens it below the sections. but it could be they only do that because there's no otherway [15:41] kalikiana: most of the stuff in dekko is custom, so I guess it is intended like that [15:41] t1mp: I'm not sure the header is. but anyway, a delegate would be good to have [15:46] * t1mp off now. Have a nice weekend :) [15:46] I guess I'll read comments on the API doc in the weekend ;) [16:21] ahayzen, kenvandine: It seems the ghost shadow related to content-hub stuff is fixed in https://trello.com/c/qikMnVBM/2215-215-ubuntu-landing-017-qtmir-qtmir-gles-mzanetti and approved by QA :) [16:21] nik90, yup [16:21] \o/ [17:07] popey, can all those reboot branches be merged if they pass jenkins? [17:08] there's like 4 of them. IF you want / need them merged before the switch, I can manually do it. If you can wait, it'll just happen [17:08] balloons: they'll need review. [17:08] ok, so I'll let them be [17:46] rpadovani: ping [17:54] hello there, I am having trouble with Linitan on all my Ubuntu pbuilders up and including to Vivid [17:54] It says: Skipping dist/deb_dist/nuitka_0.5.14~pre9+ds-1_amd64.changes: Can't locate Date/Parse.pm in @INC (you may need to install the Date::Parse module) [17:54] It seems though as the package libtimedate-perl is installed [17:55] And it was working, sometimes for years, Quantal e.g. also stopped working [17:56] with the same error, was there an update across the board that broke lintian through some missing dependency... help appreciated. I am nuitka upstream btw [17:58] ahoneybun, o/ [17:58] not sure if this link will work: https://docs.google.com/document/d/12oQYdl5mFpaJZ4NxRT0D1fZbN2EkwtoIClx5cBZImFY/edit [17:58] I'm about half way done [17:59] ahoneybun, you can't edit the original doc? Anyway, no, it says I don't have the permission... thanks for the help meanwhile :-) [17:59] I see it [18:00] I'm writing it side by side [18:00] rpadovani: you may enter :) [18:00] ahoneybun, thanks so much :-) [18:01] yep [18:01] your english grammar is getting better [18:01] your just confused with past, present and future [18:02] I live in a different spacetime, maybe? :-) [18:03] timezone more likely lol [18:04] aha [18:05] ahayzen: hey, do you mind testing my branch one last time, I am seeing some strange which I swear were working few hours back ;) [18:06] ahayzen: once I get your everythign works fine signal, I will merge it [18:06] * nik90 grabs dinner quicky === javiercrowsoft1 is now known as javiercrowsoft [18:53] rpadovani: I'll finish it at some point today lol [18:53] if not tomorrow as a I have a long trip [19:07] ahoneybun, take your time, thanks :-) [19:13] nik90, i think its been merged already :-) but i can still double check things [19:13] ahayzen: yeah I just noticed it now..sry. I am reflashing my phone clean to see if everything is okay. [19:14] ahayzen: for some reason, I couldnt set a custom sound as the alarm sound. And I kept hitting the bug you had yesterday where you couldn't save an alarm. [19:14] interesting [19:14] anything in the logs ? [19:14] ahayzen: although I did notice that indicator-sound just mysteriously died, and the logs showed line103 repeatedly as an error. [19:14] I will investigate more [19:15] maybe pulse/mh dies or something? [19:15] yes could be [19:15] but that doesn't explain why I couldn [19:15] I couldn't set a custom alarm sound though [19:15] anyway I will start testing once the flashing is complete [20:59] ahayzen: just noticed that we changed the default alarm tone which only lands in OTA-6. I am preparing a branch right now to be backwards compatible. [21:00] nik90, is that why it freezes ? [21:00] ahayzen: I doubt it..since it was freezing previously for the alarm label and not the alarm sound name. [21:01] ah [21:02] ahayzen: I am kind of cursing at QML FolderListModel at the moment...it introduces a race condition which causes another sound bug. I am fixing that as well. [21:02] ugh :-/ [21:02] they don't have any property to indicate that the folderlistmodel has fully loaded [21:02] hah, more suggestions for them :-) [21:03] so the onCompleted() signal is practically useless here and I have to rely on the count property to check if it is more than 0. [21:03] haha [21:03] Do you guys use a Timer{} anywhere in the music app to wait for the music list to be fully loaded? [21:04] no but we do for other racy reasons :-) [21:04] that's what I am doing at the moment. Waiting for 500ms atm before I do such checks. [21:04] Although I want to see how low I can take that number [21:04] as our models are now ms2 models so they are loaded directly from that [21:04] ah ok [21:05] nik90, we have this hacky timer :-) http://bazaar.launchpad.net/~music-app-dev/music-app/refactor/view/head:/app/ui/Playlists.qml#L64 [21:05] ah ok.. [21:06] basically if you on a page that is created in a delegate and then that delegate is deleted (due to you reloading the model) it causes the page to freeze, so we have to delay reloads of the model until you've popped back to that page [21:14] Does anyone know if it's possible to have an app change orientation with the screen, but when the screen is in landscape, have the app sidestage? I can't seem to get such a thing working. === salem_ is now known as _salem [21:18] vthompson, good question [21:26] nik90, I don't think allowing the app to both rotate and go into sidestage mode is supported. [21:35] Looks like the unity8 guys talked about allowing sidestage->landscape mainstage transitions... not sure what the end decision was [21:35] sorry, sidestage -> portrait mainstage [21:37] vthompson: ah ok [21:38] We can check with mzanetti on Monday to know about the end decision. [21:38] vthompson: does the desktop file still support X-Canonical-SideStage key? That's what I remember seeing in the old clock app desktop file [21:38] or is that overridden by the new portrait key we now include [21:39] nik90, I was using X-Ubuntu-StageHint=SideStage [21:40] It seems that the StageHint overrides the orientation [21:40] yes that's the one..(i was trying to remember from memory) [21:40] oh :/ [22:09] vthompson: i think the whole sidestage stuff has taken a back seat until we have a tablet on the .. table [22:13] popey, while I enjoy your pun. I do have a tablet on my table ;) [22:14] :) [22:15] * popey ensleepens [22:15] Bon weekend all... [22:15] o/ [22:15] o/ === _salem is now known as salem_ [22:21] o/ === salem_ is now known as _salem === chihchun_afk is now known as chihchun